2016-11-25 59 views
1

我有一个简单的表格,并且我想将它们按id_room分组,并且只有在条件为真时才选择值。问题是,即使有一行右列日期列year_month,该条件始终为假。MySQL - 组中的条件选择

下面是模式:

CREATE TABLE tbl_account_room (
    `id` int, 
    `year_month` date, 
    `value` int, 
    `id_room` int 
); 

INSERT INTO tbl_account_room 
    (`id`, `year_month`, `value`, `id_room`) 
VALUES 
    (1, '2016-08-01', 1, 300), 
    (2, '2016-09-01', 2, 300), 
    (3, '2016-10-01', 3, 300); 

这里查询:

SELECT 
    (case when '2016-10-01' = ar.year_month then ar.value else 0 end) as total 
FROM tbl_account_room AS ar 
WHERE ar.year_month >= "2016-08-01" 
    AND ar.year_month <= "2016-11-01" 
    and ar.id_room = '300' 
GROUP BY ar.id_room 
LIMIT 10 

这里是SQL Fiddle

total列我越来越0,我想获得价值3,因为year_month2016-10-01。为什么会发生?

回答

1

你当然不需要那么CASE条件,包括条件在WHERE条款而不是像

SELECT 
ar.value as total, 
GROUP_CONCAT(ar.year_month) 
FROM tbl_account_room AS ar 
WHERE ar.year_month = '2016-10-01' 
GROUP BY ar.id_room; 
1

不知道为什么你要这样的结果,在这里你可以使用自联接来做到这一点:

SELECT 
    MAX(t1.value) as total, 
    GROUP_CONCAT(ar.year_month) 
FROM tbl_account_room AS ar 
LEFT JOIN tbl_account_room AS t1 
ON ar.id_room = t1.id_room 
AND ar.year_month = t1.year_month 
AND t1.year_month = '2016-10-01' 
WHERE ar.year_month >= "2016-08-01" 
    AND ar.year_month <= "2016-11-01" 
    and ar.id_room = '300' 
GROUP BY ar.id_room 
LIMIT 10; 

并且这里是SQLFiddle Demo