我有一个发票系统,我正在尝试生成花费的时间报告。我将每个更改实例保存到订单中,因此每张发票上几乎每个项目都有多个条目。因此,我会过滤掉旧的更改,并尝试仅使用最新的更改。
共享project_id,phase_id和同一周开始的每个实例都是发票上的相同项目。我想生成一个报告,只抓取这些项目的最新版本。
示例表:
id project_id phase_id weekstart created
---------------------------------------------------------------
1 6 apple 2017-04-20 2017-04-23
2 6 apple 2017-04-20 2017-04-24
3 8 banana 2017-04-20 2017-04-23
4 9 pear 2017-04-20 2017-04-23
5 9 pear 2017-04-20 2017-04-25
我希望能够运行查询来获取:
id project_id phase_id weekstart created
---------------------------------------------------------------
2 6 apple 2017-04-20 2017-04-24
3 8 banana 2017-04-20 2017-04-23
5 9 pear 2017-04-20 2017-04-25
目前我使用的是:
SELECT * from invoiceitems where employee_id = 10
group by project_id, phase_id, weekstart
但这并不能说明创作日期。
对结果进行排序对group by语句没有任何影响。我已经检查了类似的帖子,但我发现只有两个人想要按最高创建日期排序,或者不按多列对结果进行分组。
答案 0 :(得分:1)
加入子查询,查找每个项目的最新创建时间。请注意,我们在此处使用GROUP BY
,但仅在子查询中使用,以汇总项目。
SELECT t1.*
FROM invoiceitems t1
INNER JOIN
(
SELECT project_id, phase_id, MAX(created) AS max_created
FROM invoiceitems
GROUP BY project_id
) t2
ON t1.project_id = t2.project_id AND
t1.phase_id = t2.phase_id
t1.created = t2.max_created
答案 1 :(得分:-2)
经过测试并完美运作
SELECT MAX(`id`) as `id`, `project_id`, `phase_id`,
`weekstart`, MAX(`created`) as `created`
FROM `invoiceitems`
GROUP BY `project_id`
ORDER BY `project_id` ASC