我有许多行具有相同日期的表。我想查询最大(最新)数据,但如果日期相同,则只返回一个。记录哪个记录并不重要,但我可以使用最新的(GID)。
我目前有这个来获取最新日期:
SELECT ProjectNum,DateSaved,FilePath ,GID
FROM dbo.master_m_table
AS [alldata]
WHERE DateSaved = (
SELECT MAX(DateSaved)
FROM dbo.master_m_table
WHERE FilePath = [alldata].FilePath)
但如果有两个相同的日期,那么它将返回两者。
更好地解释我的问题是数据:
ProjectNum DateSaved FilePath GID
12345 01.01.2015 a 1
12345 01.01.2015 a 2
12345 01.01.2015 a 88
12345 01.01.2015 c 104
12345 25.01.2015 c 101
12345 25.01.2015 c 68
...除非日期相同,否则我想要最新的日期,然后我想要最大的GID。
示例结果:
ProjectNum DateSaved FilePath GID
12345 01.01.2015 a 88
12345 25.01.2015 c 101
答案 0 :(得分:1)
看起来你正在寻找这个:
SELECT ProjectNum,DateSaved,FilePath,GID
FROM (
select
ProjectNum,DateSaved,FilePath,GID,
row_number() over
(partition by FilePath order by DateSaved desc, GID desc) as RN
from dbo.master_m_table
) X
where RN = 1
行号将为每个FilePath分别创建行数,然后按DateSaved排序,然后按GID降序排序,然后外部部件将仅选择数字1的行。您可能还需要分区中的ProjectNum
中的示例答案 1 :(得分:0)
只需使用top
和order by
:
select top 1 t.*
from dbo.master_m_table t
order by t.datesaved desc;
如果您想要所有这些内容,可以使用with ties
。
我不确定“最新的GUID”是什么意思。您可以向order by
添加更多列以处理关系。
答案 2 :(得分:0)
试试这个
SELECT top 1 ProjectNum,DateSaved,FilePath ,GID
FROM dbo.master_m_table
AS [alldata]
order by DateSaved desc, GID desc
或
SELECT top 1 ProjectNum,DateSaved,FilePath ,GID
FROM dbo.master_m_table
AS [alldata]
WHERE DateSaved = (
SELECT MAX(DateSaved)
FROM dbo.master_m_table
WHERE FilePath = [alldata].FilePath)
order by GID desc