SQL:按日期和不同的数字排序,不丢失字段
SQL: Order by date and distinct Number without losing fields
我对 SQL 的了解不是最好的,但我需要一个快速的解决方案。我有一个table
number | date | text
1 | 2018-01-13 | A
2 | 2018-01-15 | B
1 | 2018-02-15 | C
现在我需要根据日期删除输出 (select) 中的重复值 "number"。它应该是这样的:
number | date | text
2 | 2018-01-15 | B
1 | 2018-02-15 | C
我试过了
SELECT DISTINCT number, date ORDER BY date DESC FROM table
问题是我现在错过了输出中的字段 "text"。我也试过了
SELECT * DISTINCT(SELECT * number ORDER BY(date) DESC) FROM table
有什么想法吗?
一个选项使用 ROW_NUMBER
:
SELECT number, date, text
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY number ORDER BY date DESC) rn
FROM yourTable
) t
WHERE rn = 1;
您可以使用以下查询实现它:
SELECT t1.number, t1.date, t1.text
FROM yourTable t1
INNER JOIN
(
SELECT number, MAX(date) AS max_date
FROM yourTable
GROUP BY number
) t2
ON t1.number = t2.number AND
t1.date = t2.max_date;
只需使用 window 函数即可完成:
create table #TEST ([NUMBER] int, [DATE] date, [TEXT] char(1))
insert into #TEST values (1, '2018-01-13', 'A'), (2, '2018-01-15', 'B'), (1, '2018-02-15', 'C')
SELECT DISTINCT [NUMBER]
, FIRST_VALUE([DATE]) OVER (PARTITION BY [NUMBER] ORDER BY [DATE] DESC) AS [DATE]
, FIRST_VALUE([TEXT]) OVER (PARTITION BY [NUMBER] ORDER BY [DATE] DESC) AS [TEXT]
FROM #TEST
使用下面的查询,这将满足您的要求
SELECT数字、日期、文字
从
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY number ORDER BY date DESC) rn
从测试
) 吨
其中 rn = 1;
我对 SQL 的了解不是最好的,但我需要一个快速的解决方案。我有一个table
number | date | text
1 | 2018-01-13 | A
2 | 2018-01-15 | B
1 | 2018-02-15 | C
现在我需要根据日期删除输出 (select) 中的重复值 "number"。它应该是这样的:
number | date | text
2 | 2018-01-15 | B
1 | 2018-02-15 | C
我试过了
SELECT DISTINCT number, date ORDER BY date DESC FROM table
问题是我现在错过了输出中的字段 "text"。我也试过了
SELECT * DISTINCT(SELECT * number ORDER BY(date) DESC) FROM table
有什么想法吗?
一个选项使用 ROW_NUMBER
:
SELECT number, date, text
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY number ORDER BY date DESC) rn
FROM yourTable
) t
WHERE rn = 1;
您可以使用以下查询实现它:
SELECT t1.number, t1.date, t1.text
FROM yourTable t1
INNER JOIN
(
SELECT number, MAX(date) AS max_date
FROM yourTable
GROUP BY number
) t2
ON t1.number = t2.number AND
t1.date = t2.max_date;
只需使用 window 函数即可完成:
create table #TEST ([NUMBER] int, [DATE] date, [TEXT] char(1))
insert into #TEST values (1, '2018-01-13', 'A'), (2, '2018-01-15', 'B'), (1, '2018-02-15', 'C')
SELECT DISTINCT [NUMBER]
, FIRST_VALUE([DATE]) OVER (PARTITION BY [NUMBER] ORDER BY [DATE] DESC) AS [DATE]
, FIRST_VALUE([TEXT]) OVER (PARTITION BY [NUMBER] ORDER BY [DATE] DESC) AS [TEXT]
FROM #TEST
使用下面的查询,这将满足您的要求
SELECT数字、日期、文字 从 ( SELECT *, ROW_NUMBER() OVER (PARTITION BY number ORDER BY date DESC) rn 从测试 ) 吨 其中 rn = 1;