【问题标题】:How to get the soonest date in relation to another date field如何获得与另一个日期字段相关的最快日期
【发布时间】:2020-10-26 13:11:01
【问题描述】:

假设我在一个表(表 a)中有一个日期字段:

+---------+------------+
| item_id | Date       |
+---------+------------+
| 12333   | 10/12/2020 |
+---------+------------+
| 45678   | 10/12/2020 |
+---------+------------+

然后我有另一个日期的表,它加入到上面的表中(他们加入表 b 的主键):

+-------------+------------+-----------+------------+
| primary_key | date2      | item_id   | Date       |
| (table b)   | (table b)  | (table a) | (table a)  |
+-------------+------------+-----------+------------+
| 45318       | 10/10/2020 | 12333     | 10/12/2020 |
+-------------+------------+-----------+------------+
| 45318       | 10/13/2020 | 12333     | 10/12/2020 |
+-------------+------------+-----------+------------+
| 45318       | 10/24/2020 | 12333     | 10/12/2020 |
+-------------+------------+-----------+------------+
| 75394       | 10/20/2020 | 45678     | 10/12/2020 |
+-------------+------------+-----------+------------+

您看到最后一列来自表 a。我想获取表 b 的“date2”列,以便给我 2020 年 10 月 12 日之后的最早日期,并删除其余的。

因此,对于 45318 的示例,我只想保留第二行(即 10/13/2020),因为那是 2020 年 10 月 12 日之后的最早日期。

如果这没有意义,请告诉我,我会解决它!

【问题讨论】:

  • MAXRetrieving last record in each group from database 有什么问题?您尝试过什么?为什么它不起作用?
  • @Larnu 我假设如果我得到 date2 的最大值 45318,它会给我 2020 年 10 月 24 日,我不想要那个。
  • 只有当你的JOIN错了,@hanbanan。

标签: sql sql-server clarity


【解决方案1】:

一种方法是apply:

select a.*, b.*. -- or whatever columns you want
from a outer apply
     (select top (1) b.*
      from b
      where b.item_id = a.item_id and
            b.date2 >= '2020-10-12'
      order by b.date2 asc
     ) b;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多