T-SQL的最早日期和独特的类别选择行(T-SQL select rows by oldest da

2019-09-01 03:34发布

我使用的是Microsoft SQL。 我有一个包含两个不同的类别和日期存储信息的表格。 例如:

ID   Cat1   Cat2   Date/Time   Data  
1    1      A      11:00       456
2    1      B      11:01       789
3    1      A      11:01       123
4    2      A      11:05       987
5    2      B      11:06       654
6    1      A      11:06       321

我想提取CAT1和CAT2的每个唯一组合一行,我需要与最早的日期就行了。 另外,在上述我想ID = 1,2,4,和5。

谢谢

Answer 1:

看看row_number() MSDN上。

SELECT  *
FROM    (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY date_time, id) rn
        FROM    mytable
        ) q
WHERE   rn = 1

(上运行代码SQL小提琴 )



Answer 2:

Quassnoi的答案是好的,但我有点不舒服就如何处理的DUP。 这似乎基于插入顺序返回,但我不知道,如果连这都得到保障? (参见,其中基于插入顺序的结果变化的一例这两个小提琴: DUP在结束 , 在开始DUP )

另外,我还挺喜欢用时,我可以老派SQL住,所以我会做这种方式(请参阅本拨弄它是如何处理的DUP):

select *
from my_table t1
  left join my_table t2
    on t1.cat1 = t2.cat1
    and t1.cat2 = t2.cat2
    and t1.datetime > t2.datetime
where t2.datetime is null


文章来源: T-SQL select rows by oldest date and unique category