检索最大日期结果

时间:2018-11-01 21:50:09

标签: sql

表A

Group   ID  
1      117  
2     123  
3     117  

表B

Group ID    Date  
1     120   18/2/2  
1     113   18/2/3  
1     123   18/2/4  
2     113   18/1/1  
2     120   18/4/5  
2     123   18/7/6   
3     113   18/1/1  
3     120   18/4/5  
3     123   18/2/3 

我想检索表A中的Id = 117的所有行以及表B中ID = 123的对应条目,以及是否具有最大日期
结果应为: 1 123 18/2/4

4 个答案:

答案 0 :(得分:1)

我认为您正在寻找

SELECT MIN(T1.[Group]) [Group],
       T1.ID,
       T2.ID,
       MAX(T2.[Date]) [Date]
FROM T1 INNER JOIN T2 ON T1.[Group] = T2.[Group]
WHERE T1.ID = 117
      AND
      T2.ID = 123
GROUP BY T1.ID,
         T2.ID;

返回:

+-------+-----+-----+---------------------+
| Group | ID  | ID  |        Date         |
+-------+-----+-----+---------------------+
|     1 | 117 | 123 | 04/02/2018 00:00:00 |
+-------+-----+-----+---------------------+

答案 1 :(得分:0)

Select T1.Group ,T2.ID, T2.Date 
From TableA as T1 INNER JOIN TableB as T2
ON T1.GroupId = T2.GroupId 
WHERE T2.Date = (SELECT MAX(T2.Date))

您可以尝试执行此查询吗,它基本上是将两个表与GroupID连接在一起,因为它们是这些表之间的关系,然后从第二个表中选择MAX日期值,然后在选择中指定要查看的内容。 / p>

因为您说过要在第一个表中查看组,在第二个表中查看ID,在第二个表中查看最大日期,所以。

答案 2 :(得分:0)

;WITH subq AS (
    SELECT b.id, MAX(b.date) mx_date
    FROM b
    INNER JOIN a ON b.group = a.group
    WHERE a.id = 117 AND b.id = 123
    GROUP BY b.id
)
SELECT b.group, s.id, s.mx_date
FROM subq s
INNER JOIN b ON s.id = b.id and s.mx_date = b.date

这是我的解决方法。

  • 加入表a和b
  • 按a.id = 117和b.id = 123过滤
  • 按b.id分组并选择max(date)
  • 重新加入b以选择组

答案 3 :(得分:0)

首先,您在Date Format中输入了错误的TableB,我很想知道date类型列中的这种格式,如果没有,那就麻烦了。

如果此格式已经在date类型列中设置,那么您可以尝试此查询

SELECT 
     TA.Group, 
     TB.ID, 
     TB.Max_Date 
FROM 
     TableA as TA 
     INNER JOIN (SELECT 
                    GROUP, 
                    ID, 
                    MAX(DATE) AS Max_Date
                 FROM
                    TableB
                 WHERE
                    ID = '123'
                 GROUP BY
                    GROUP,
                    ID) TB ON TA.Group = TB.Group
WHERE
     TA.ID = 117

对于最坏的情况,您在Date列中不是Date Format。你可以试试看。

    SELECT 
         TA.Group, 
         TB.ID, 
         TB.Max_Date 
    FROM 
         TableA as TA 
         INNER JOIN (SELECT 
                        GROUP, 
                        ID, 
                        MAX(To_Date(DATE, 'YY/MM/DD')) AS Max_Date
                     FROM
                        TableB
                     WHERE
                        ID = '123'
                     GROUP BY
                        GROUP,
                        ID) TB ON TA.Group = TB.Group
    WHERE
         TA.ID = 117

我在To_Date中使用Postgresql函数,因为我不知道您正在使用什么rdbms