当记录具有相同的日期时,选择MAX MAX DATE

时间:2015-08-13 18:43:04

标签: sql sql-server max

我有许多行具有相同日期的表。我想查询最大(最新)数据,但如果日期相同,则只返回一个。记录哪个记录并不重要,但我可以使用最新的(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

3 个答案:

答案 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

SQL Fiddle

中的示例

答案 1 :(得分:0)

只需使用toporder 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