【问题标题】:Last 10 days Values based on Last available data过去 10 天的值基于最后可用数据
【发布时间】:2014-06-23 10:28:38
【问题描述】:

我必须以这样一种方式从表中获取数据,即获取数据的开始日期基于最后插入数据的日期。

例如,我有从24/01/2011 到现在的数据。但是对于某些特定的 id,我们在24/01/2012 上插入了最后一个数据。在这种情况下,对于该 ID,我必须从 14/01/2012 获取数据到 24/01/2012

因为我不知道插入数据的最后日期,所以首先我必须获取日期的最大值,并以此为基础找到开始日期。有什么快速的方法可以做到这一点。所以一切都在单一和快速的查询中处理。

【问题讨论】:

    标签: sql firebird


    【解决方案1】:

    如果我理解您的问题,答案可能如下所示:

        SELECT *
      FROM table_1 t1
     WHERE table_1.start_date >= to_date('14/01/2012', 'DD-MM-YYYY')
       AND table_1.start_date <=
           (SELECT MAX(t11.insert_date) FROM table_1 t11 WHERE t1.id = t11.id)
    

    【讨论】:

    • 我有单列日期(当数据感兴趣时)。我必须在某个日期范围内找到数据。但是对于那个范围,我知道这将是 10 天的期限,但我不知道范围的开始和结束日期。所以首先我必须得到结束日期,然后根据期间我会得到范围。
    • 上面的答案不起作用,因为它硬编码了开始日期,但问题明确指出所需的开始日期是基于最后插入的数据。有一个项目的最近插入日期为 24/01/2012 的示例,因此该项目的 start_date 是 14/01/2012,但这不是所有数据的固定开始日期。
    • 它不必对日期进行硬编码。这只是一个例子。您可以将具有正确日期的变量放在那里。然后它看起来像这样: SELECT * FROM table_1 t1 WHERE table_1.start_date >= l_some_date AND table_1.start_date
    【解决方案2】:

    以下查询选择开始日期大于或等于最后开始日期 - 10 天的所有行。我相信火鸟是正确的

     SELECT *
    FROM table t1
    WHERE t1.startdate >= dateadd(-10 day to MAX(t1.startdate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多