【发布时间】:2021-03-07 08:46:33
【问题描述】:
我有两张桌子:
TABLE_01
-------------------------------
| ID | Key1 | Key2 |
-------------------------------
| 1 | 504 | 101 |
| 2 | 504 | 102 |
| 3 | 505 | 101 |
| 4 | 505 | 103 |
| 5 | 508 | 101 |
| 6 | 510 | 104 |
| 7 | 509 | 101 |
-------------------------------
TABLE_02
----------------------------------------
| ID | T_01 | timestamp | data |
----------------------------------------
| 1 | 1 | ts_01 | ..abc.. |
| 2 | 1 | ts_02 | ..dfg.. |
| 3 | 2 | ts_03 | ..hij.. |
| 4 | 3 | ts_04 | ..klm.. |
| 5 | 1 | ts_05 | ..nop.. |
| 6 | 4 | ts_06 | ..qrs.. |
| 7 | 3 | ts_07 | ..tuv.. |
| 8 | 5 | ts_08 | ..wxy.. |
| 9 | 2 | ts_09 | ..z.... |
| 10 | 4 | ts_10 | ..abc.. |
----------------------------------------
- 在两个表中,
ID是主增量键 - 在
TABLE_01中,key1+key2列是唯一键(不能超过一个Key1 Key2对) - 在
TABLE_02中,T_01列引用了TABLE_01.ID
我的目标是,给定一个key1 值,能够通过DESC ORDER 上的对应timestamp 获得每个TABLE_01.ID 的最后一个TABLE_02 条目。
例如,如果我给505,输出应该是:
KEY1 | KEY2 | TIMESTAMP
---------------------------
505 | 103 | ts_10 ---> FROM TABLE_01.Id = 4
505 | 101 | ts_07 ---> FROM TABLE_01.Id = 3
如您所见,它仅显示TABLE_01.ID = 4 情况下的最后一个条目(即505 | 103)
我尝试过这样做:
SELECT `t1`.`Key1`, `t1`.`key2`, `t2`.`timestamp`
FROM `TABLE_02` AS t2
INNER JOIN `TABLE_01` AS t1
WHERE `t1`.`key1` = '505'
ORDER BY `t2`.`ID`
DESC LIMIT 100
此查询的问题在于,由于我使用的是t2.timestamp,因此我收到了所有结果,而不仅仅是每个结果一个。另外,我在TABLE_02 上没有正确使用TABLE_01.ID。
【问题讨论】:
标签: mysql sql datetime inner-join greatest-n-per-group