我试图返回每一个人的最大日期行,我如何过滤这个
H 115KT,1/2/2021,ghiH 216G 217
结果是这样的吗?
我已经尝试了最大日期和分组的首字母,但我试图返回文本从条目的最大日期。
谢谢
发布于 2021-10-27 19:58:13
做这件事有几种方法。
DDL (我为测试目的使用了临时表):
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp;
CREATE TABLE #tmp (
initials varchar(10),
date date,
text varchar(10)
);
INSERT INTO #tmp
VALUES
('DD', '2022-01-01', '123'),
('DD', '2021-01-01', '456'),
('DD', '2020-01-01', '789'),
('KT', '2020-01-01', 'abc'),
('KT', '2022-01-01', '123'),
('KT', '2021-01-02', 'ghi');版本1(使用MAX的子查询):该版本提取唯一的首字母及其最大日期,然后链接到这些首字母上的原始表和日期,以便从记录中提取文本。
SELECT t.initials, t.date, t.text
FROM #tmp AS t
INNER JOIN (
SELECT initials, MAX(date) AS max_date
FROM #tmp
GROUP BY initials
) AS sub
ON t.initials = sub.initials
AND t.date = sub.max_date版本2(使用ROW_NUMBER的子查询):该版本使用窗口函数ROW_NUMBER对按日期降序排列的每一行进行编号。这将给最近的日期一个1的行号,然后用行号= 1从记录中提取文本。
SELECT sub.initials, sub.date, sub.text
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY initials ORDER BY date DESC) AS row_num
FROM #tmp
) AS sub
WHERE sub.row_num = 1由于在最大日期上,示例集中的两个首字母的文本是相同的,因此我在最终结果集中添加了首字母和日期以进行澄清。
您也可以使用CTE而不是子查询(我更喜欢这样),但我不想让事情复杂化。
https://stackoverflow.com/questions/69740732
复制相似问题