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;