Mysql-一个表一个语句中的两个查询

时间:2014-06-30 09:29:16

标签: mysql sql mysql-workbench

我有一张表来存储客户费用,例如

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。 我尝试了内部联接但我无法解决它。

我该怎么做?

最好的问候

1 个答案:

答案 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年内具有相同的月份数。