表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
答案 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
这是我的解决方法。
答案 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
。