【问题标题】:Last observation carried forward query (SELECT from-between incomplete time series)上次观察结转查询(SELECT from-between 不完整的时间序列)
【发布时间】:2021-01-28 16:43:53
【问题描述】:

我有一个表,只有在完成某些重新计算时才会获取新行(TOTAL 列)

DATE_REFRESH    TOTAL
2020-08-28     40000.00
2020-09-04     60000.00
2020-09-22    100000.00
2020-10-13    125000.00

我需要SELECT 一个日期2020-09-15 并返回60 000,这是2020-09-22 下一次更新/刷新之前的最后一个金额

想要的结果:60 000

泰!

【问题讨论】:

  • SQL Server 还是 Oracle?您真正在使用什么?到目前为止,尝试了什么?为什么它不起作用?带有简单 WHERETOP(或 Oracle 等价物)肯定会做到这一点,那为什么不起作用呢?
  • 是 TOTAL 字符串列还是小数,因为预期输出 60 000 OR 60.000?
  • 我已经删除了冲突的标签,请重新标记您真正使用的RDBMS,并且只标记那个RDBMS。
  • 我使用的是 SQL Server,TOTAL 列是浮动的。

标签: sql sql-server datetime sql-order-by sql-limit


【解决方案1】:

我想我理解你的问题,我的方法是在 SQL 中使用 DATEDIFF() 来解决它。 所以 SQL 脚本如下:

SELECT TOTAL FROM (*your table*)
WHERE DATE_REFRESH = (
 SELECT TOP 1 DATE_REFRESH
 FROM (*your table*)
 WHERE DATE_REFRESH < (*your date*)
 ORDER BY DATEDIFF ( (*your date*), DATE_REFRESH )
)

我从与您的日期最近的 (TOP 1 FROM - ORDER BY DATEDIFF()) 较小 (DATE_REFRESH &lt; (*your date*)) 日期所在的行中选择 TOTAL。

我希望它有所帮助。 :)

【讨论】:

    【解决方案2】:

    您可以使用order bytop (1)

    select top (1) *
    from mytable 
    where date_refresh <= '20200915'
    order by date_refresh desc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 2023-01-12
      • 2020-07-27
      相关资源
      最近更新 更多