【问题标题】:SQL Query that Selects All Rows with a Certain Date (The Most Recent Date, Prior to a Given Date)选择具有特定日期(最近日期,在给定日期之前)的所有行的 SQL 查询
【发布时间】:2013-05-16 00:06:41
【问题描述】:

如果数据是这样的:

AsOfDate   |  Animal |  Version |  
2013/07/01 |  Cat    |    0.8   |  
2013/07/01 |  Dog    |    0.3   |  
2013/04/15 |  Cat    |    0.6   |  
2013/04/15 |  Dog    |    0.2   |  
2012/12/20 |  Cat    |    0.5   |  
2012/12/20 |  Dog    |    0.1   |  

我希望能够指定一些给定的日期参数,例如 2013/5/01,并选择所有具有最近一个日期 (2013/4/15) 的行作为结果:

2013/04/15 |  Cat    |    0.6   |
2013/04/15 |  Dog    |    0.2   |

【问题讨论】:

  • 2013/5/01 如何符合这个等式?
  • @Ek0nomik 这是我的输入参数示例。我希望能够查看任何给定日期存在的版本。每一行数据都可以被认为是一次“状态更新”。版本已更新,并包括更新时间。因此,上面显示的输出显示了 2013/5/01 存在的版本。

标签: sql


【解决方案1】:
    Select *
    from <TABLE NAME HERE>
    where AsOfDate = (Select Max(AsOfDate) 
                             from <TABLE NAME HERE>
                             where AsOfDate <= <INPUT DATE HERE>)

【讨论】:

    【解决方案2】:

    在我看来,OP 想要的不是将来的最近日期,所以我建议如下:

    SELECT * 
    FROM TABLE 
    WHERE AsOfDate = 
        (SELECT MAX(AsOfDate) 
        FROM TABLE 
        WHERE AsOfDate <= CURRENT_DATE())
    

    请注意,CURRENT_DATE 符合 SQL92 标准(请参阅this IBM article)并返回执行日期。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 2018-06-04
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多