我有一个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中进行组合,但这似乎效率低下。
答案 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,那么您需要从某个地方获取日期列表,然后将所有日期加入其中。