У меня проблема с запросом, содержащим GROUP BY.В ходе диагностики я удалил оператор GROUP BY, чтобы увидеть необработанные данные - однако, когда я это делаю, я получаю FEWER строк, которые я делаю с GROUP BY.
Воспроизвести:
CREATE TABLE `test1` (
`date` bigint(20) DEFAULT NULL,
`quantity` int(11) DEFAULT NULL,
`processed` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO `test1` VALUES (1312483084,3,2),(1312483084,1,2),(1312483148,1,2),(1312483148,1,2),(1314038654,1,2),(1314301805,1,2);
Теперь запустите мой оригинальный SELECT (в комплекте с GROUP BY):
SELECT DATEDIFF(from_unixtime(test1.date), from_unixtime(1311801510)) DIV 28 AS date_idx,
min(DATEDIFF(from_unixtime(test1.date), from_unixtime(1311801510))) AS orig_date_idx, SUM(test1.quantity) AS num_items,
IF(test1.processed in (2,3,4), 'Complete','Pending') as status
FROM test1
GROUP BY status, date_idx \G
Вы должны получить две строки:
*************************** 1. row ***************************
date_idx: 0
orig_date_idx: 8
num_items: 7
status: Complete
*************************** 2. row ***************************
date_idx: 1
orig_date_idx: 29
num_items: 1
status: Complete
Теперь удалите GROUP BY, то есть:
SELECT DATEDIFF(from_unixtime(test1.date), from_unixtime(1311801510)) DIV 28 AS date_idx,
min(DATEDIFF(from_unixtime(test1.date), from_unixtime(1311801510))) AS orig_date_idx, SUM(test1.quantity) AS num_items,
IF(test1.processed in (2,3,4), 'Complete','Pending') as status
FROM test1
Внезапно вы получите только одну возвращенную строку - строка с date_idx == 1 в исходном результате была объединена сзапись для date_idx == 0
*************************** 1. row ***************************
date_idx: 0
orig_date_idx: 8
num_items: 8
status: Complete
Все идеи с благодарностью приняты!