我有一个表CR,其acc_id,cr_id,start_time为列
+-------+-------+----------+
| cr_id |acc_id |start_time|
+-------+-------+----------+
| 1 | 100 |12.30 am |
| 2 | 200 | 1.30 am |
| 3 | 300 |10.30 am |
| 4 | 300 | 8.30 am |
| 5 | 200 | 9.30 am |
+-------+-------+----------+
我想获得acc_id和cr_id,它具有特定acc_id的最大start_time acc_id 200和300的上表的结果应为
+-------+-------+
| cr_id |acc_id |
+-------+-------+
| 5 | 200 |
| 3 | 300 |
+----+------+----
我尝试使用以下查询但是正在提供所有记录
SELECT ACC_ID
CR_ID
FROM CR
WHERE START_TIME IN
(SELECT MAX(START_tIME)
FROM CR
WHERE ACC_ID in (100,200)
GROUP BY ACC_ID
);
答案 0 :(得分:0)
使用连接和子查询。假设start_time
是timestamp
数据类型。
SELECT CR.*
FROM CR
(
SELECT ACC_ID, MAX(start_time) max_start_time
FROM CR
WHERE ACC_ID in (100,200)
GROUP BY ACC_ID
) t ON t.acc_id = cr.acc_id and
t.max_start_time = cr.start_time
也可以将它解决为窗口函数,但是,此解决方案允许优化器使用索引better(如果它们可用)。
答案 1 :(得分:0)
我会这样写:
<script src='js/scripts.js'></script>
你的尝试非常接近。您缺少的行是检查主查询中的acc_id是否与子查询中的acc_id匹配。
更新:如果没有相同的acc_id多次返回,如果有多个记录具有最大开始时间,则可以使用MIN选择具有首先按字母顺序排列的cr_id的acc_id。