【问题标题】:Join two tables with not exactly matching dates in sql在sql中加入两个日期不完全匹配的表
【发布时间】:2012-05-14 02:23:28
【问题描述】:

我有一张桌子的日期比另一张桌子早大约 1 个月。

例如, 一张表报告第一季度于 3 月 31 日结束 其他报告第一季度于 2 月 28 日(或 29 日)结束 但是无论两个日期是否完全相同,都可以按日期将它们连接在一起。

任何建议,请。

谢谢

【问题讨论】:

  • @MichaelCapobianco 可能是如果您使用的是 CROSS APPLY 或 OUTER APPLY。 ANSI SQL 也引入了这种能力,称为 LATERAL,Postgresql 计划支持该查询

标签: sql sql-server tsql


【解决方案1】:

你可以加入 DateDiff(dd, Date1, Date2)

或者更准确

select endOfMonth.*, begOfMonth.* 
from endOfMonth join begOfMonth 
on DATEADD (dd , 1 , endOfMonth.date ) = begOfMonth.Date

【讨论】:

    【解决方案2】:

    您的 ON 子句可以查看年份和季度以进行匹配:

    ON TABLE1.YEAR([1st quarter end ]) = TABLE2.YEAR([1st quarter end ])
    AND TABLE1.QUARTER([1st quarter end ]) = TABLE2.QUARTER([1st quarter end ])
    

    【讨论】:

      【解决方案3】:
      select val1 From Table1 T1 inner Join Table2 t2 on MONTH(T1.date1) = MONTH(t2.date1)
      And YEAR(T1.date1) = YEAR(t2.date1)
      

      【讨论】:

      • 这不适用于引用的示例,因为 2 月 3 月。
      【解决方案4】:

      一种方法是使用DATEPART() function,它返回任何给定日期的quarter。然后您就可以在返回的季度加入。

      示例 SQL:

      SELECT *
      FROM 
      (
          SELECT DATEPART(QUARTER,date_column) AS t1_quarter
          FROM table1
          UNION ALL
          SELECT DATEPART(QUARTER,date_column) AS t2_quarter
          FROM table2
      ) AS temp
      WHERE temp.t1_quarter = temp.t2_quarter;
      

      将您需要的任何其他字段(最有可能是 ID 字段)放入内部 SELECTS 中。

      【讨论】:

      • Sql server 在 QUARTER([FIELD NAME]) 内置季度有这个功能
      • 我想按日期链接表格 select * from table1 t1, table2 t2 where t1.Date = t2.Date 但在我的例子中,t1.Date (第一季度末)是3 月 31 日和 t2.Date(第一季度末)是 2 月 29 日,但可以让表中的其余数据通过联接对齐
      • DATEPART(QUARTER)(请说 QUARTER 而不是 qq 速记)与贵公司的财政季度不一致,除非它恰好是 1 月至 3 月、4 月至 6 月等。通常这需要日历表。
      【解决方案5】:

      如果我正确理解您并且您在这些表中具有相同数量的列,那么您应该在 SQL 查询中使用 UNION。在此处查看有关UNION 的更多信息:http://en.wikipedia.org/wiki/Set_operations_%28SQL%29

      【讨论】:

        猜你喜欢
        • 2014-12-11
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        相关资源
        最近更新 更多