我有一张表来存储客户费用,例如
Card_id | days | ytl(expense-$)
1 2014-05-21 50
2 2014-06-12 30
2 2014-06-13 20
3 2014-05-13 20
3 2014-06-20 20
3 2014-05-13 35
3 2014-06-20 26
我需要5月和6月每个月费用超过40美元的人。
SELECT DISTINCT card_id
FROM expenses
WHERE date(days) > DATE("2014-05-01")
AND date(days) < DATE("2015-06-30")
GROUP BY card_id HAVING SUM(YTL) >= 40
此查询总共给我两个月的时间。 所以它返回card_id:1-2-3。我需要3个
我不能使用 intersect ,因为我正在使用MySql。 我尝试了内部联接但我无法解决它。
我该怎么做?
最好的问候
答案 0 :(得分:2)
一种方法: -
SELECT card_id
FROM
(
SELECT card_id, MONTH(days) AS card_month, SUM(YTL) as card_sum
FROM expenses
WHERE days BETWEEN "2014-05-01" AND "2015-06-30"
GROUP BY card_id, card_month
HAVING card_sum >= 40
) sub0
GROUP BY card_id
HAVING COUNT(*) = 2
这有一个子查询,可以获取每个月每张卡的总和,使用HAVIING检查每个月的总和是否超过40个。
然后检查此子查询以查找计数为2的卡(即,来自子查询的该车的2行,每月一个)。
如果您需要更大的日期范围,则可能需要对此进行调整,以考虑子查询结果中2年内具有相同的月份数。