SELECT
cms_module_ladu_batch.id AS batch_id,
name, t1, cms_module_ladu_batch.date_changed AS date_ch,
t13, t2, t3, t4, bkuup, date_modified, date_created,
kogused.aadress AS aadress,
kogused.kogus AS kogus,
SUM(kogused.kogus) AS total
FROM
cms_module_ladu_batch
LEFT JOIN kogused
ON cms_module_ladu_batch.id = kogused.bid
WHERE
t2!='Sildid'
GROUP BY
batch_id
这就是 MySQL 代码 - 问题如下。我需要排除总计为 0 且 date_ch 早于一个月的行(date_cd 格式为“2011-01-01 00:00:00”)。 是否可以? http://jsfiddle.net/tiitremmel/2mvrr/1/ - jsfiddle 示例 - 第一个表就像 mysql 结果是默认的,第二个表是结果的样子。
最佳答案
将日期条件添加到 WHERE
语句中并排除 SUM
作为
HAVING
-语句。它应该看起来像这样:
SELECT cms_module_ladu_batch.id AS batch_id,
cms_module_ladu_batch.date_changed AS date_ch,
kogused.kogus AS kogus,
SUM(kogused.kogus) AS total
FROM cms_module_ladu_batch
LEFT JOIN kogused ON cms_module_ladu_batch.id = kogused.bid
WHERE t2 != 'Sildid'
AND (
(
cms_module_ladu_batch.date_changed < DATE_SUB(NOW(), INTERVAL 1 MONTH)
AND SUM(kogused.kogus) > 0
)
OR
cms_module_ladu_batch.date_changed > DATE_SUB(NOW(), INTERVAL 1 MONTH)
)
GROUP BY batch_id;
或者...使用 UNION 语句将两个 SELECTS 粘合在一起。
SELECT cms_module_ladu_batch.id AS batch_id,
cms_module_ladu_batch.date_changed AS date_ch,
kogused.kogus AS kogus,
SUM(kogused.kogus) AS total
FROM cms_module_ladu_batch
LEFT JOIN kogused ON cms_module_ladu_batch.id = kogused.bid
WHERE t2 != 'Sildid'
AND cms_module_ladu_batch.date_changed < DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY batch_id
HAVING total > 0
UNION
SELECT cms_module_ladu_batch.id AS batch_id,
cms_module_ladu_batch.date_changed AS date_ch,
kogused.kogus AS kogus,
SUM(kogused.kogus) AS total
FROM cms_module_ladu_batch
LEFT JOIN kogused ON cms_module_ladu_batch.id = kogused.bid
WHERE t2 != 'Sildid'
AND cms_module_ladu_batch.date_changed > DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY batch_id;
尝试两者,看看哪种最适合您的解决方案。
关于php - MySQL 如何在where 中包含两个子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472790/