【发布时间】:2014-12-07 07:14:44
【问题描述】:
我有下一个问题:
SELECT
a.Date,
(SELECT SUM(Used), SUM(Max) FROM Switch_Statistic b WHERE Date = (SELECT MAX(Date) FROM Switch_Statistic WHERE Switch_ID = b.Switch_ID AND Date <= a.Date))
FROM Switch_Statistic a
GROUP BY Date;
如您所见,我需要从子查询中选择 SUM(Used), SUM(Max)。用CONCAT 不是很好的解决方案!
表架构:
ID --- Switch_ID --- Date --- Max --- Used
一些数据:
1 641 2014-10-04 2 16
20 630 2014-10-04 1 7
24 634 2014-10-04 0 8
26 641 2014-10-06 2 16
32 641 2014-10-07 2 16
35 641 2014-10-08 3 16
39 641 2014-10-09 2 16
64 293 2014-10-10 1 22
...
557 38 2014-10-12 3 22
559 293 2014-10-12 1 22
563 294 2014-10-12 6 22
565 641 2014-10-12 2 16
我需要什么: CONCAT_WS 示例
mysql> SELECT
a.Date,
(SELECT CONCAT_WS('/', SUM(Used), SUM(Max)) FROM Switch_Statistic b WHERE Date = (SELECT MAX(Date) FROM Switch_Statistic WHERE Switch_ID = b.Switch_ID AND Date <= a.Date)) AS Result
FROM Switch_Statistic a
GROUP BY Date;
+------------+----------+
| Date | Result |
+------------+----------+
| 2014-10-04 | 3/31 |
| 2014-10-06 | 3/31 |
| 2014-10-07 | 3/31 |
| 2014-10-08 | 4/31 |
| 2014-10-09 | 3/31 |
| 2014-10-10 | 249/1587 |
| 2014-10-11 | 354/2147 |
| 2014-10-12 | 360/2185 |
+------------+----------+
8 rows in set (0.26 sec)
查询逻辑: 1)从表中选择所有日期 2) SUM - 当前日期的已用和最大值,如果 Switch_ID 没有该日期的记录,则选择表中存在的最后一个
链接到 sqlfiddle - http://sqlfiddle.com/#!2/c3d479
【问题讨论】:
-
您能否分享您的表格结构、一些示例数据以及您想要实现的目标?
-
那么你的问题是什么??
-
编辑您的问题并添加您想要的结果。