【发布时间】:2011-07-15 02:14:51
【问题描述】:
我正在尝试在一个 SQL 查询中收集统计数据,以便在联合中自动对日期进行排序。它实际上只有一张表,但我想统计不同的数据案例。
我的表看起来像这样:
ID In Wanted
441 2011-03-14 0
439 2011-03-14 1
442 2011-03-14 0
428 2011-03-13 1
431 2011-03-13 1
425 2011-03-11 0
423 2011-03-11 1
420 2011-03-09 1
我通过这个查询接近了预期的结果:
SELECT * FROM
(
(SELECT date(In) n, count(date(In)) cntw, null cntl FROM items i WHERE Wanted=1 group by date(In))
union all
(SELECT date(In) n, null cntw, count(date(In)) cntl FROM items i WHERE Wanted=0 group by date(In))
) Serie
Order by n DESC
但是 close 不够接近 :D 我得到的结果是这样的:
n cntw cntl
2011-03-14 null 2
2011-03-14 1 null
2011-03-13 2 null
2011-03-11 null 1
2011-03-11 1 null
2011-03-09 1 null
我想要的是按日期“混合”同一行的结果:
n cntw cntl
2011-03-14 1 2
2011-03-13 2 null
2011-03-11 1 1
2011-03-09 1 null
如您所见,每个日期只有一行。 实际上,最完美的结果是甚至还有缺失的日期:
n cntw cntl
2011-03-14 1 2
2011-03-13 2 null
2011-03-12 null null
2011-03-11 1 1
2011-03-10 null null
2011-03-09 1 null
...但我想这是不可能的。
谢谢!
【问题讨论】:
-
您应该避免在字段名称中使用 MySQL 关键字(我的意思是
In字段)。关于问题:不能以某种方式使用GROUP BY吗? -
嗯,这个名字实际上是
CheckIn并且表格比我在这里展示的要复杂得多,我在我的例子中缩短了它。