SQL Server-选择带有最新日期和其他结果的不重复

时间:2018-09-26 01:03:11

标签: sql-server distinct

有了上面的寄存器,我该如何获取具有最近日期的代码(考虑到前三个代码相同), 并仍然显示其他结果?

id  |  agency   |  code     |   date
1   |  11111    |  12345    |   2018-09-25 00:01:10.000
2   |  11111    |  12345    |   2018-09-25 00:01:20.000
3   |  11111    |  12345    |   2018-09-25 00:01:30.000
4   |  22222    |  23456    |   2018-09-25 00:02:00.000
7   |  33333    |  54321    |   2018-09-25 00:02:10.000

我想拥有的是:

id  |  agency   |  code     |   date
3   |  11111    |  12345    |   2018-09-25 00:01:30.000
4   |  22222    |  23456    |   2018-09-25 00:02:00.000
7   |  33333    |  54321    |   2018-09-25 00:02:10.000

在此先感谢您提供进一步的帮助!

3 个答案:

答案 0 :(得分:0)

请考虑“过滤”。在这种情况下,使用相关子查询:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.agency = t.agency);

答案 1 :(得分:0)

您有两种情况要处理。
(1)从youTable获取每个代理商的最长日期。这可以通过使用聚合函数(max())并按代理分组来完成。

(2)从yourTable中选择所有记录,并与(1)的结果进行内部联接。

select t1.id, t1.agency,t1.code,t1.date 
from yourTable t1 
    inner join 
    (
        --only most recent of each agency
        select max(date) date,agency from yourTable group by agency
    ) t2 on t1.[date]=t2.[date] and t1.agency=t2.agency

答案 2 :(得分:0)

使用ROW_NUMBER值


这将为您提供帮助。

您可以通过不同的列获取每一行的ROW_NUMBER值。 按日期列的顺序进行设置。

SELECT  *
FROM  (
        SELECT  *,
            ROW_NUMBER() OVER(PARTITION BY AGENCY, CODE ORDER BY date_column) AS ROW_NUMBER
        FROM  table_name
    ) AS ROWS
WHERE ROW_NUMBER = 1

示例SQL Fiddle