我们有两个表 Spot 和 Spot_Log,其中包含以下数据:
现货:
ESN | Department | VehicleModel | AssignedToName
--------------------------------------------------------
0-2506698 | 23 | 2014 Equinox | Ron
0-2507419 | 32 | 2015 Sierra | Chuck
0-2506208 | 32 | 2015 Sierra | Don
0-2506629 | 32 | 2014 Silverado | Jonathan
Spot_Log:
ESN_ID | est_dt | latitude | longitude
-----------------------------------------------------
0-2506698 | 20/11/2014 11:08 | 43.712910 | -79.367798
0-2506698 | 20/11/2014 10:43 | 43.713322 | -79.359741
0-2506698 | 20/11/2014 10:39 | 43.713341 | -79.359741
0-2506629 | 20/11/2014 10:07 | 48.412701 | -89.248047
0-2506629 | 20/11/2014 10:02 | 48.412720 | -89.248047
0-2506629 | 20/11/2014 10:01 | 48.412788 | -89.248108
0-2506698 | 20/11/2014 09:26 | 43.714870 | -79.357758
0-2506698 | 20/11/2014 09:21 | 43.714729 | -79.357819
0-2506698 | 20/11/2014 07:15 | 43.993961 | -79.229401
0-2506698 | 20/11/2014 07:11 | 44.018250 | -79.230591
0-2506629 | 19/11/2014 19:01 | 48.412682 | -89.247887
0-2506629 | 19/11/2014 16:53 | 48.412670 | -89.247993
0-2506629 | 19/11/2014 16:48 | 48.412670 | -89.247963
0-2506208 | 19/11/2014 16:43 | 48.399891 | -89.257599
0-2506629 | 19/11/2014 16:39 | 48.404961 | -89.252808
0-2506208 | 19/11/2014 16:38 | 48.399940 | -89.257721
0-2506698 | 19/11/2014 16:37 | 44.096931 | -79.129028
0-2506208 | 19/11/2014 16:33 | 48.399872 | -89.25769
0-2506698 | 19/11/2014 16:32 | 44.096951 | -79.129059
0-2506208 | 19/11/2014 16:31 | 48.402531 | -89.254089
0-2506698 | 19/11/2014 16:27 | 44.080601 | -79.15979
0-2506698 | 19/11/2014 15:07 | 43.765202 | -79.376801
0-2506698 | 19/11/2014 14:59 | 43.732059 | -79.440338
0-2507419 | 19/11/2014 14:49 | 48.399891 | -89.25766
0-2507419 | 19/11/2014 14:43 | 48.399879 | -89.25766
0-2507419 | 19/11/2014 14:38 | 48.399830 | -89.257721
0-2507419 | 19/11/2014 14:34 | 48.399899 | -89.25769
0-2507419 | 19/11/2014 14:00 | 48.399872 | -89.25766
我们所要做的就是根据 Spot_Log.est_dt 列为 Spot 表中列出的每辆车选择最新数据,如下所示:
ESN | Department | VehicleModel | AssignedToName | est_dt | latitude | longitude
----------------------------------------------------------------------------------------------------
0-2506698 | 23 | 2014 Equinox | Ron | 20/11/2014 11:08 | 43.712910 | -79.367798
0-2507419 | 32 | 2015 Sierra | Chuck | 19/11/2014 14:49 | 48.399891 | -89.25766
0-2506208 | 32 | 2015 Sierra | Don | 19/11/2014 16:43 | 48.399891 | -89.257599
0-2506629 | 32 | 2014 Silverado | Jonathan | 20/11/2014 10:07 | 48.412701 | -89.248047
由于目前 Spot 表中有 4 条记录,因此它应该返回 4 条最新记录。
我尝试了以下查询,尽管存在 DISTINCT 并且提到了联接条件,但它们还是显示了所有行
SELECT s.ESN, s.AssignedToName, s.Department, sl.est_dt, sl.latitude, sl.longitude
FROM SpotTrace s, SpotTrace_Log sl
WHERE s.ESN = sl.ESN_ID
ORDER BY s.ESN, sl.est_dt DESC;
SELECT DISTINCT s.ESN, s.AssignedToName, s.Department, sl.est_dt, sl.latitude, sl.longitude
FROM SpotTrace s, SpotTrace_Log sl
WHERE s.ESN = sl.ESN_ID
ORDER BY s.ESN, sl.est_dt DESC
我也尝试过 Limit 4,但它只显示所有行的前 4 行,如上所示。
SELECT DISTINCT s.ESN, s.AssignedToName, s.Department, sl.est_dt, sl.latitude, sl.longitude
FROM SpotTrace s, SpotTrace_Log sl
WHERE s.ESN = sl.ESN_ID
ORDER BY s.ESN, sl.est_dt DESC
LIMIT 4;
感谢您的热心帮助。
最佳答案
我认为问题来自于您适用于所有属性的独特之处。
你有没有尝试过类似的事情:
SELECT s.ESN, s.AssignedToName, s.Department, sl.est_dt, sl.latitude, sl.longitude
FROM SpotTrace s
JOIN SpotTrace_Log sl on s.ESN = sl.ESN_ID AND MAX(est_dt)
ORDER BY s.ESN
关于MySQL - 需要根据子表中的日期/时间列获取父表中每条记录的最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045899/