2013-11-09 3 views
2

У меня есть 3 таблицы mysql с данными о продуктах с временной меткой, классифицированными по серийным номерам.показать данные по датам mysql

Я хотел бы показать, сколько различных записей серийного номера находится в каждой таблице по дате.

Таблица 1:

serial  timestamp 

1    7/7/13 
2    7/7/13 
3    7/8/13 
4    7/9/13 
5    7/9/13 
6    7/9/13 

Таблица 2:

serial  timestamp 
1    7/6/13 
2    7/7/13 
3    7/8/13 
4    7/9/13 

таблица 3:

serial  timestamp 
1    7/9/13 
2    7/10/13 
3    7/10/13 

вывод должен быть таким:

date  table1  table2  table3 
7/6/13  0   1   0 
7/7/13  2   1   0 
7/8/13  1   1   0 
7/9/13  3   1   1 
7/10/13  0   0   2 
Total  6   4   3 

ищет самый элегантный способ сделать это и отобразить это в html через PHP. необходимо запустить таблицу вывода с самой ранней датой в трех таблицах и завершить с последней датой в трех таблицах.

+1

Почему все эти разделы разбиты на три таблицы? Было бы намного проще и лучше выполнять запрос к одной таблице. – helion3

+1

Почему «запрос» должен быть в запросе? Кажется, это то, что вы должны рассчитать в своем собственном –

+0

. В следующий раз покажите, что вы пытались избежать классики. * Это не настоящий вопрос. * –

ответ

1

Вы должны сначала объединить все данные в одну производную таблицу, а затем повернуть эту таблицу:

SELECT timestamp, 
    COUNT(CASE WHEN tableNumber = 1 THEN tableNumber END) table1Total, 
    COUNT(CASE WHEN tableNumber = 2 THEN tableNumber END) table2Total, 
    COUNT(CASE WHEN tableNumber = 3 THEN tableNumber END) table3Total 
FROM (
    SELECT timestamp, 1 tableNumber FROM table1 
    UNION ALL 
    SELECT timestamp, 2 FROM table2 
    UNION ALL 
    SELECT timestamp, 3 FROM table3 
) c 
GROUP BY timestamp 

Выход:

|  TIMESTAMP | TABLE1TOTAL | TABLE2TOTAL | TABLE3TOTAL | 
|---------------|-------------|-------------|-------------| 
| July, 06 2013 |   0 |   1 |   0 | 
| July, 07 2013 |   2 |   1 |   0 | 
| July, 08 2013 |   1 |   1 |   0 | 
| July, 09 2013 |   3 |   1 |   1 | 
| July, 10 2013 |   0 |   0 |   2 | 

Скрипт here.

При необходимости добавить WITH ROLLUP после GROUP BY, чтобы показать итоговые значения.

+1

+1 для sqlfiddle, это решение действительно потрясающе! –

0

Использование COUNT и GROUP BY

SELECT 
     `timestamp` 
     COUNT(*) as numEntries 
    FROM 
     tbl 
    GROUP BY 
     `timestamp` 
+0

Я так не думаю ... –

+0

Да, это работает только на одном столе вовремя. Виноват. – willy

Смежные вопросы