google-bigquery - 为具有相同标识符的多个条目分配增量值
问题描述
我有这种情况,即相同的值(项目)可以分配多个日期
Item1 01/01/2018
Item1 01/03/2018
Item1 01/05/2018
Item2 01/01/2018
Item2 01/03/2018
Item3 01/03/2018
有没有办法为同一项目的每个日期值分配一个数字,以便输出是一个递增的数字列表(每个不同项目从 1 开始并计数)?
Item1 01/01/2018 1
Item1 01/03/2018 2
Item1 01/05/2018 3
Item2 01/01/2018 1
Item2 01/03/2018 2
Item3 01/03/2018 1
谢谢您的帮助!
解决方案
以下是 BigQuery 标准 SQL
#standardSQL
SELECT item, dt,
ROW_NUMBER() OVER(PARTITION BY item ORDER BY PARSE_DATE('%d/%m/%Y', dt)) value
FROM `project.dataset.table`
您可以使用您提供的示例数据进行测试和使用
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Item1' item, '01/01/2018' dt UNION ALL
SELECT 'Item1', '01/03/2018' UNION ALL
SELECT 'Item1', '01/05/2018' UNION ALL
SELECT 'Item2', '01/01/2018' UNION ALL
SELECT 'Item2', '01/03/2018' UNION ALL
SELECT 'Item3', '01/03/2018'
)
SELECT item, dt,
ROW_NUMBER() OVER(PARTITION BY item ORDER BY PARSE_DATE('%d/%m/%Y', dt)) value
FROM `project.dataset.table`
ORDER BY item, dt
结果
Row item dt value
1 Item1 01/01/2018 1
2 Item1 01/03/2018 2
3 Item1 01/05/2018 3
4 Item2 01/01/2018 1
5 Item2 01/03/2018 2
6 Item3 01/03/2018 1
推荐阅读
- apache-spark - 多级分区表的 Spark (EMR) 分区修剪行为
- android - 在 android 中首次初始化后,回收器 item_view 的高度正在改变
- elasticsearch - Hibernate-Search 6 和 Elasticsearch 集成
- java - 在 Spark Structured Streaming 中遇到问题
- docusignapi - API(签名数),返回签名文档,签名位置
- c++ - 如何从 C++ 文件中读取用逗号分隔的全名?
- c - 将多个客户端 fifo 连接到一个服务器 fifo
- jfreechart - 如何在 JFreeChart 散点图中创建空心形状
- c# - DDD 使用事件还是服务?
- linux - 结合两个find命令linux的结果