【问题标题】:Date query in SqlSql中的日期查询
【发布时间】:2011-06-23 05:16:44
【问题描述】:

我有一张桌子,那里有are 5 columns,比如说a,b,c,d,tran_date

我想生成一个查询来找出表中每个 a,b,c,d 的最小 tran_date。

任何帮助如何做到这一点。

编辑:这个查询的结果需要从查询的结果中减去一个日期:

  select ref_date from ref_table

如何做到这一点,因为错误ORA-01427: single row subquery returns more than one row

【问题讨论】:

  • 不确定“表中每个 a、b、c、d 的最小 tran_date”是什么意思?您能否提供一些示例数据以及输出应该是什么?此外,您使用的 SQL 风格也会有所帮助。
  • @CamJackson 我正在使用 Oracle SQL

标签: sql oracle ora-01427


【解决方案1】:

如果我理解正确,请尝试类似

SELECT  a,
        b,
        c,
        d,
        MIN(tran_date) MIN_tran_date
FROM    Table
GROUP BY    a,
            b,
            c,
            d

【讨论】:

    【解决方案2】:

    扩展@astander 的答案以包括额外的减法要求:

    select a, b, c, d,
        min(tran_date) as min_tran_date,
        min(tran_date) - (select ref_date from ref_table) as diff
    from my_table
    group by a, b, c, d;
    

    请注意,diff 可能是正数或负数,具体取决于 ref_date 是在所有 tran_date 值之前、之后还是在中间某个位置。

    如果您只对某些 diff 值感兴趣 - 例如,最小的 tran_dateref_date 之后 - 您可以添加 having 子句来过滤结果;在这种情况下:

    having min(tran_date) - (select ref_date from ref_table) > 0
    

    或者说得更清楚:

    having min(tran_date) > (select ref_date from ref_table)
    

    【讨论】:

      【解决方案3】:
      SELECT A, Min(SomeDate) FROM Foo GROUP BY A
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        相关资源
        最近更新 更多