【问题标题】:Fetch the MAX(date) from table1 which is < MIN(date) from table 2从表 1 中获取小于表 2 的 MIN(日期)的 MAX(日期)
【发布时间】:2019-03-01 18:45:03
【问题描述】:

这里我有一个表 1(主表(AAA))和表 2(子主表(BBB))。 我已经使用某些条件从 AAA 获取了一些数据到 BBB。

(表 1 AAA)

ID          Date1                   Grade1
1           2013-07-12 00:00:00.000 1 
1           2014-04-02 00:00:00.000 1 
1           2014-12-29 00:00:00.000 NULL
100000      2012-10-01 00:00:00.000 NULL
100000      2015-10-08 00:00:00.000 NULL
100000      2017-01-10 00:00:00.000 1 
100000      2018-05-29 00:00:00.000 2 

表 2 BBB

ID          Date2                   Grade2
1           2013-07-12 00:00:00.000 1 
1           2014-04-02 00:00:00.000 1 
100000      2017-01-10 00:00:00.000 1 
100000      2018-05-29 00:00:00.000 2 

现在我想使用另一个条件从 AAA 获取另外几个数据到 BBB。

选择 MIN(date2) 并找到 MAX(date1)

这意味着 OP 应该是这样的

100000      2015-10-08 00:00:00.000 NULL

请帮我解决这个问题 提前致谢!

【问题讨论】:

  • OP 来自哪个表?
  • @Squirrel 来自 AAA

标签: sql sql-server


【解决方案1】:

像下面这样试试

 with 
  t1 as    
 (
   select id,max(date1) as date1 from AAA where grade1 is null
   group by id
  ), 
  t2 as

  (
  select id, min(date2) as  date2 from BBB group by id
  ) select t1.*,t2.*
     from t1 join t2 on t1.id=t2.id
     where t1.date1<t2.date2

【讨论】:

    【解决方案2】:
    SELECT *
    FROM   (
               -- Get Max of Date1 with Grade1 is null vallue
               SELECT ID, Date1 = MAX(Date1)
               FROM   Table1
               WHERE  Grade1 IS NULL
               GROUP BY ID
           ) t1
           INNER JOIN
           (
               -- Get Min of Date2
               SELECT ID, Date2 = MIN(Date2)
               FROM   Table2
               GROUP BY ID
           ) t2
           ON  t1.ID = t2.ID
    WHERE  t1.Date1 < t2.Date2
    

    【讨论】:

      【解决方案3】:

      从 AAA 中选择 Max(Date1) 其中 Date1

      【讨论】:

        【解决方案4】:

        你可以通过将你的英文直接翻译成sql来做到这一点:

        SELECT TOP 1 * FROM aaa
        WHERE date1 < (SELECT MIN(date2)FROM bbb) and grade1 is null
        ORDER BY date1 desc
        

        具体细节来自您的英语要求:它们获取日期小于表 2 中最小值的所有行。具有最大日期的行是按日期降序排列的前 1 行

        【讨论】:

          【解决方案5】:
          SELECT *
          FROM   (
                     SELECT ID, MAX(Date1)
                     FROM   Table1
                     WHERE  Grade1 IS NULL
                     GROUP BY ID
                 ) t1
                 INNER JOIN
                 (
                     SELECT ID, Date2 = MIN(Date2)
                     FROM   Table2
                     GROUP BY ID
                 ) t2
                 ON  t1.ID = t2.ID
          and t1.Date1 < t2.Date2
          

          【讨论】:

            猜你喜欢
            • 2017-06-10
            • 2015-08-04
            • 1970-01-01
            • 2014-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-11
            相关资源
            最近更新 更多