我有以下mysql-table结构并将其用作一种日志表(entries_log):
customer_id | parent_id | child_id | quarter | month
xyz | 21 | 3 | 20121 | 201201
xyz | 21 | 5 | 20121 | 201201
xyz | 21 | 5 | 20122 | 201204
xyz | 21 | 6 | 20122 | 201204
xyz | 21 | 4 | 20123 | 201207
... | ... | .... | .... | ...
我希望你能理解这张桌子。现在我想跟踪每个customer_id的child_id是否存在与上一季度相关的每个季度的任何上行变化(四分之一行可能存在差距,因此以下示例是可能的,并且必须被视为:20121年...... 20122年...... 20124年。
所以在上面的例子中我只想得到以下输出:
xyz | 21 | 5 | 20121 | 201201
xyz | 21 | 6 | 20122 | 201204
我解决了这个问题:
SELECT e.customer_id, e.parent_id, e.child_id, e.month, e.quarter
FROM (
SELECT MAX(month) AS maxmonth, quarter, max(child_id)
FROM entries_log AS e
WHERE EXISTS (
SELECT *
FROM entries_log AS f
WHERE (
SELECT COUNT(*) FROM entries_log AS g
WHERE g.quarter = f.quarter
AND g.month = f.month
) <= 2
AND e.quarter > quarter
AND e.child_id> child_id
)
GROUP BY quarter
) AS x
INNER JOIN entries_log AS e ON e.quarter = x.quarter AND e.month = x.maxmonth;
我阅读了this网站,这对我帮助很大,但我仍然无法找到正确的查询。
感谢您的帮助,谢谢!
答案 0 :(得分:0)
正如波希米亚人所说,这可以通过变量实现。 Explain Extended很好地描述了如何在MySQL中实现前导/滞后。您需要添加一些额外的逻辑来处理您的确切要求,但它应该指向正确的方向。