如何制作一个包含'组的选择查询很多陈述

时间:2014-05-22 09:01:16

标签: mysql sql

我有一个MySQL查询,如下所示:

select `date`, `foo` from `readings` 
where `item_id` = 1 
and `date` between '2014-03-01' and '2014-03-30';

返回如下内容:

date        foo(item 1)
-----------------------
2014-03-01  2.24
2014-03-02  8.19
2014-03-03  9.63
etc

但是,我需要重复查询,因为我想为许多项列出foo列,如下所示:

date        foo(item 1)    foo(item 2)    foo(item N)
-----------------------------------------------------

制作一个“分组”多个语句的选择查询的最佳方法是什么?

到目前为止,我唯一想到的解决方案是使用不同的项ID运行多次查询,并在PHP中进行组合,但这似乎效率低下。

2 个答案:

答案 0 :(得分:0)

这个怎么样?

SELECT DATE,
CASE WHEN ITEM_ID = 1 AND DATE BETWEEN SO AND SO THEN FOO END AS FOO_1,
CASE WHEN ITEM_ID = 2 AND DATE BETWEEN SO AND SO THEN FOO END AS FOO_2,
CASE WHEN ITEM_ID = 3 AND DATE BETWEEN SO AND SO THEN FOO END AS FOO_3
.
.
FROM TABLE

答案 1 :(得分:0)

由于每个结果行的数据来自不同的表行,因此您需要将表连接到每个项目的自身。

假设范围内的每个日期的所有项目都存在数据:

select t1.date, t1.foo foo_t1, t2.foo foo_t2, ..., tn.foo foo_tn
from mytable t1
join mytable t2 on t2.date = t1.date and t2.item = 2
...
join mytable tn on tn.date = t1.date and tn.item = n
where t1.item = 1
and t1.date between '2014-03-01' and '2014-03-30'

如果某些日期缺少某些商品编号(1除外),请使用left join代替join

如果某些日期也可能丢失1,那么您需要从某个地方获取日期列表,然后将所有日期加入其中。