通过具有order by和最新记录来应用组

0x6upsns  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(338)

例如,我需要将orderbydate列的groupbyname列与最新的组放在一起
数据:

name|status|date
john|read  |07/23/2020
matt|read  |07/23/2020
john|print |07/24/2020
matt|print |07/24/2020

应显示为:

name|status|date
john|print |07/24/2020
john|read  |07/23/2020
matt|print |07/24/2020
matt|read  |07/23/2020

请帮助我。
我目前的尝试:

;with cte as(
    select status,name, date,
    ROW_NUMBER() OVER(PARTITION BY name ORDER BY date desc) RowID
    from @tbl
)

select status,name,timeStamp from cte
order by timeStamp desc,RowID desc
fwzugrvs

fwzugrvs1#

可以使用窗口函数:

select *
from mytable t
order by max(date) over(partition by name) desc, date desc
fkaflof6

fkaflof62#

我猜你在找

WITH CTE AS
(
  SELECT *, ROW_NUMBER() OVER(PARTITION BY Status ORDER BY [Date]) RN
  FROM
  (
    VALUES
    ('john', 'print', '2020-07-24'),
    ('john', 'read', '2020-07-23'),
    ('matt', 'print', '2020-07-24'),
    ('matt', 'read', '2020-07-23')
  ) T(Name, Status, [Date])
)
SELECT Name, Status, [Date]
FROM CTE
ORDER BY RN DESC;

这是一把小提琴

mec1mxoz

mec1mxoz3#

可以在中使用窗口函数 order by . 但是当有联系的时候,你可能也想把名字放在一起,所以你需要三个键:

order by max(date) over (partition by name) desc,
         name,
         date desc;

请注意,您也可以使用其他领带断路器。例如,当两个名称具有相同的最新日期时,您可以将具有最新最早日期的名称放在具有附加键的第一位:

order by max(date) over (partition by name) desc,
         min(date) over (partition by name) desc,
         name,
         date desc;

相关问题