SQL+获取具有最新日期的行+row_number()+重复时的情况

Posted

技术标签:

【中文标题】SQL+获取具有最新日期的行+row_number()+重复时的情况【英文标题】:SQL+Fetch rows with latest date+Case when row_number()+Duplicates 【发布时间】:2019-05-28 10:03:01 【问题描述】:

我有一个表格,其中包含以下示例数据的字段(id、日期、产品)

id  date    Product current_Flag    Expected_flag
14834   2019-01-03 00:00:00 A   1   1
14834   2019-01-31 00:00:00 B   0   0
14834   2019-02-28 00:00:00 C   0   0
14834   2019-03-30 00:00:00 C   0   0
14834   2019-01-03 00:00:00 D   0   1

我正在尝试case when row_number() over (partition by id order by date) = 1 then 1 else 0 end as flag, 但是对于具有最小日期的特定不同 ID,它的标志为 1,但我需要将特定 ID 和最小日期和产品标记为 1 标志,如 Expected_flag 所示

case when row_number() over (partition by id order by date) = 1 then 1 else 0 end as flag

【问题讨论】:

【参考方案1】:

你需要 dense_rank() 代替:

case when dense_rank() over (partition by id order by date) = 1 then 1 else 0 end as Expected_flag

【讨论】:

以上是关于SQL+获取具有最新日期的行+row_number()+重复时的情况的主要内容,如果未能解决你的问题,请参考以下文章

从每组中的 3 个表中选择 sql 中具有最新日期的行

从 ROW_NUM 中仅选择编号最大的行以获取最新更新

用于从表中选择具有最新时间戳的行的 JOOQ 代码

我只想查看具有最新报告日期的行

Python sqlite3 SQL查询获取具有最新日期但每个唯一列限制的所有条目

“具有最大日期的行中的属性”的分析函数