选择具有重复值的最新项目

时间:2011-09-19 17:05:15

标签: mysql sql greatest-n-per-group

根据以下信息,如何选择尚未执行的唯一time_enteredparams对的最新订单项(基于cron_action_id)?

cron_schedule

enter image description here

例如,ID 1,2和4具有相同的paramscron_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的行

由于

2 个答案:

答案 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

试一试