【问题标题】:SQL Join based on dates- Table2.Date=Next date after Table1.DateSQL Join based on dates- Table2.Date=Table1.Date 之后的下一个日期
【发布时间】:2015-06-18 15:34:47
【问题描述】:

我有两个单独的表,我想根据日期加入它们。但是,我不希望表中的日期彼此相等我希望将一个表中的日期(和随附的值)与第二张桌子。

我在下面举了一个问题的例子:

表 1:

Date          Value
2015-04-13    A   
2015-04-10    B
2015-04-09    C
2015-04-08    D

表 2:

Date          Value
2015-04-13    E    
2015-04-10    F
2015-04-09    G
2015-04-08    H

所需的输出表:

Table1.Date   Table2.Date   Table1.Value   Table2.Value
2015-04-10    2015-04-13    B              E
2015-04-09    2015-04-10    C              F
2015-04-08    2015-04-09    D              G

我什至不知道该怎么做,因此缺少我当前的 SQL 起点!

希望这很清楚。我发现这个相关的问题很接近,但我在将它合并到连接语句时迷失了! SQL - Select next date query

非常感谢任何帮助!

M.

编辑- 有一个重要的考虑因素是这一天并不总是简单的 1 天后。他们需要找到第二天 available,这在原始问题中,但我更新了我的示例以反映这一点。

【问题讨论】:

    标签: sql sql-server tsql date join


    【解决方案1】:

    由于您想要下一个可用日期,并且可能不一定是下一个日期(例如 date + 1),您需要使用带有 mintop 1 的相关子查询。

    这将为您提供所需的输出:

    ;WITH src AS (
        SELECT 
           Date,
           NextDate = (SELECT MIN(Date) FROM Table2 WHERE Date > t1.Date) 
        FROM table1 t1
    ) 
    
    SELECT src.Date, src.NextDate, t1.Value, t2.Value 
    FROM src 
    JOIN Table1 t1 ON src.Date = t1.Date
    JOIN Table2 t2 ON src.NextDate = t2.Date
    WHERE src.NextDate IS NOT NULL
    ORDER BY src.Date DESC
    

    Sample SQL Fiddle

    【讨论】:

    • 这正确地解决了下一个“可用日”所需的条件-谢谢 jpw!!!
    【解决方案2】:
    try this
    select  [Table 1].Date,[Table 1].Value,[Table 2].date,[Table 2].Value
    from    [Table 1]
    join    [Table 1]
        on  dateadd(dd,1,[Table 1].date) = [Table 2].date
    

    【讨论】:

      【解决方案3】:

      我会选择外部应用:

      SELECT t1.*, t2.*
      FROM Table1 t1
      CROSS APPLY (
        SELECT TOP 1 * 
        FROM  Table2 t2
        WHERE t2.Date > t1.Date
        ORDER BY t2.Date) t2
      ORDER BY t1.Date DESC
      

      【讨论】:

        猜你喜欢
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多