根据以下信息,如何选择尚未执行的唯一time_entered
和params
对的最新订单项(基于cron_action_id
)?
例如,ID 1,2和4具有相同的params
和cron_action_id
,因此我无需选择全部3,只需id 4. id为3/5和7 /的相同原则8。
我只能到目前为止
SELECT *
FROM cron_schedule cs
INNER JOIN cron_actions ca
ON cs.cron_action_id = ca.cron_action_id
WHERE time_executed = 0
-- GROUP BY (params, cron_action_id) ?
这应该返回id为4,5,6和8的行
由于
答案 0 :(得分:1)
SELECT t1.*
FROM cron_schedule t1
INNER JOIN (SELECT params,
cs.cron_action_id,
Max(time_entered) AS time_entered
FROM cron_schedule cs
INNER JOIN cron_actions ca
ON cs.cron_action_id = ca.cron_action_id
WHERE time_executed = 0
GROUP BY params, cron_action_id) AS t2
ON t1.params = t2.params
AND t1.cron_action_id = t2.cron_action_id
AND t1.time_entered = t2.time_entered
INNER JOIN cron_actions ca2
ON t1.cron_action_id = ca2.cron_action_id
WHERE t1.time_executed = 0
答案 1 :(得分:0)
未经测试,但这个基本想法应该有效:
SELECT *
FROM
cron_schedule outer_cron_schedule JOIN cron_actions
WHERE
time_entered = (
SELECT MAX(time_entered)
FROM cron_schedule inner_cron_schedule
WHERE
outer_cron_schedule.id = inner_cron_schedule.id
GROUP BY
params, cron_action_id
)
AND time_executed = 0
试一试