【问题标题】:Query to get oldest date into a column?查询以将最旧的日期放入列中?
【发布时间】:2017-12-14 22:07:02
【问题描述】:

我有一些看起来像这样的表格:

表1

Column1
A
B
C

表2

column1 Id1 Id2
A       2   100
A       3   101
B       2   100
B       3   101
C       2   100

表3

Id2 Date     Item  Status
100 10/20/17  A1     A
101 10/21/17  A1     A
100 11/22/17  A2     I
101 11/23/17  A2     A

我的查询如下所示:

Select 
    Date, *
FROM TABLE1 T1
LEFT JOIN Table2 T2 ON
T1.Column1 = T2.Column2
LEFT JOIN Table3 T3 ON
T2.Id2 = T3.Id2

我想将表 3 中状态为 A 的最旧日期返回到查询中的日期列中。

我能够使用此查询返回最旧的日期,但无法通过连接将其集成到我的查询中。

 SELECT 
      MIN(DATE) 
 FROM Table3
 WHERE Id2 IN (100,101)
 AND STATUS = 'A'
 group by Id2, ITEM

如何在使用连接子句的查询中获取最早的日期?

【问题讨论】:

  • 不清楚您在这里要做什么。给定您的样本数据,您希望输出什么?
  • 您的查询看起来存在根本缺陷。 T1.Column1 = T2.Column2T2.Id2 = T3.Id3 的连接条件,因为它们引用了不存在的列(分别为 T2.Column2T3.Id3)。你真的要使用T1.Column1 = T2.Column1T2.Id2 = T3.Id2 吗?
  • "我想将表 3 中状态为 A 的最旧日期返回到我查询的日期列中。" -- 这是否意味着您只想返回状态为 A 的行中最旧的日期?为什么需要 Table3 之外的表?
  • 如果我们不知道您想要什么,没有人可以帮助您。这是如何提问的指南。 stackoverflow.com/help/how-to-ask

标签: sql sql-server


【解决方案1】:

我认为您正在尝试做的事情的几种方法。

我想说最简单的方法是使用表 3 的子查询来简化您的搜索参数。

select *  from table2 t2
LEFT JOIN 
(Select Id2, Item, max(Date)from Table 3
WHERE Status = 'A'
GROUP BY Id2, Item)a ON t2.Id2 = a.Id2;

子查询进行过滤,然后快速加入表 2 将获取您的所有数据。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2014-02-07
    • 1970-01-01
    • 2015-02-22
    • 2019-09-13
    • 1970-01-01
    • 2013-04-11
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多