【问题标题】:Get latest updated records获取最新更新的记录
【发布时间】:2012-11-05 05:32:36
【问题描述】:

我在 SQL Server 2008 中有一个“观察”表。该表有一个 locationId 列用于一组地理位置,几列用于观察详细信息和一个用于最新更新日期的列。

每周都会为每个位置附加一条新的观察记录。所以一个位置在表中出现了很多次。

我想要实现的是能够获得每个位置最近的观察记录。

任何人都可以提供任何想法吗?

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:
     select * from observation where date=(select max(date) from observation)
    

    select top 1 * from observation order by date desc
    

    【讨论】:

    • 它必须是 SELECT TOP 1 * FROM .....(注意:1* 之间有空格而不是点)
    【解决方案2】:
    select a.* from observations a inner join 
    (select locationid ,max(updateddate) dates  from observations
    group by locationid) b
    on a.locationid=b.locationid
    and a.updateddate=b.dates  
    

    【讨论】:

      【解决方案3】:

      运行查询

      select * from Observation 
      group by location 
      order by viewdate desc
      

      还请提供有关表格的完整详细信息以及您想要获得的内容。

      编辑:已删除反引号。

      【讨论】:

      • 所有这些反引号 - 围绕表名和列名。那是 MySQL - 不是 SQL Server。
      • 这仍然不是有效的 SQL Server。当您按location 分组时,该列必须是 SELECT 中唯一允许的不聚合的列,所有其他列必须聚合或忽略。 MySQL 允许在 SELECT 中使用非聚合非 GROUP BY 列,您似乎已经被宠坏了。虽然我认为即使在 MySQL 中也无法编译,因为在这种情况下您不能在 ORDER BY 中引用viewdate
      • 如果您真的有兴趣为 SQL Server 找到正确(有效)的解决方案,并且手边没有 SQL Server 实例,请考虑使用SQLFiddle 进行简单测试。
      【解决方案4】:

      向表中添加数据类型为 [timestamp] 的列 执行以下代码:

      select top(10) * from yourtablename order by columanname desc
      

      注意:columanname 应该是你添加的带有时间戳类型的列

      【讨论】:

        【解决方案5】:

        使用 Getdate 函数,如下所示。

        select * from TBL_MP_QC_CustomerWiseCOA_Master  order by getdate() desc
        

        【讨论】:

          猜你喜欢
          • 2016-10-15
          • 2013-12-17
          • 2020-02-28
          • 2017-07-27
          • 1970-01-01
          • 1970-01-01
          • 2012-04-10
          • 2012-02-12
          • 2018-10-17
          相关资源
          最近更新 更多