【发布时间】:2021-02-07 00:40:41
【问题描述】:
本着简洁美观的编码精神,我想知道是否有人能够创建一个完全如下执行的查询,但没有子查询。
查询示例:
本质上,子查询是通过首先对每个患者的每一行进行排序和标记来检索每个用户的最近日期,其中“1”是每个患者的最近日期。然后,外部查询识别并返回每个“1”,即与每个用户关联的最大日期。
SELECT user_name
,date
FROM(
SELECT user_name
,date
,row_number() OVER(PARTITION BY user_name ORDER BY date DESC) as row_num
FROM yourtable
) AS t
WHERE t.row_num = 1
数据示例预执行:
|user_name|date |
|Some1 |10/22|
|Some1 |10/27|
|Some1 |10/30|
|Some2 |10/30|
|Some2 |11/15|
|Some2 |11/18|
执行后数据示例:
|user_name|date |
|Some1 |10/30|
|Some2 |11/18|
准备让你们大吃一惊
【问题讨论】:
-
你为什么特别想避免子查询?替代品可能表现不佳。
标签: sql sql-server greatest-n-per-group