如果我有两个表,表A和表B,对于一个给定的名字,我怎样才能只在表A的最新日期比表B中的最新日期新,或者表B中不存在这个名字的情况下,才能得到表A的最新日期。
尝试但未获得任何结果,至少需要table_a中的行
SELECT t1.* FROM table_a t1
WHERE t1.date > (SELECT MAX(t2.date)
FROM table_b t2
WHERE t1.name = t2.name)
ORDER BY t1.date DESC LIMIT 1
表A
| 身份证|姓名|日期|状态|年龄|
| - ------|- ------|- ------|- ------|- ------|
| 1个|约翰|2022年11月25日05时02分55秒|纽约州|三十二|
| 第二章|玛丽|2022年11月28日08时05分55秒|高|二十六|
| 三个|玛丽|2022年11月25日01时02分54秒|佛罗里达州|二十五|
| 四个|比尔|2022年11月28日05时02分35秒|纽约州|三十二|
| 五个|比尔|2022年11月15日05时02分55秒|高|二十六|
| 六个|比尔|2022年11月11日07时33分21秒|佛罗里达州|二十五|
表B
| 身份证|姓名|日期|学院|重量|
| - ------|- ------|- ------|- ------|- ------|
| 1个|约翰|2022年11月26日05时02分55秒|纽约大学|一百八十|
| 第二章|玛丽|2022年11月27日05时02分55秒|高强度单位|一百四十|
| 三个|玛丽|2022年11月25日05时02分55秒|流感|一百五十五|
预期结果
| 身份证|姓名|日期|状态|年龄|
| - ------|- ------|- ------|- ------|- ------|
| 第二章|玛丽|2022年11月28日08时05分55秒|高|二十六|
| 四个|比尔|2022年11月28日05时02分35秒|纽约州|三十二|
3条答案
按热度按时间63lcw9qa1#
1.latest for table A -
distinct on
允许您选择给定组的最新记录,按日期排序。1.* 仅当它比表B中的最新日期新或者名称在表B中不存在 * -这将直接转换为
not exists
子查询表达式。我假设您指的是相同名称的最新日期。Online demo
n7taea2i2#
试试这个
vfh0ocws3#
如果我没理解错的话,这应该能达到你的目的:
查询的主要部分,在
AND
之前将获取每个具有最新日期的名称。您可以删除查询的其余部分来证明这一点。然后应用另外两个条件。
NOT EXISTS
选项将查找那些没有出现在另一个表中的名称。第二个选项是名称出现在那里,但最新日期仍然早于第一个表中的日期。
使用示例数据在此处进行尝试:db<>fiddle