对于不同的帐户,按日期列出SQL列

时间:2013-12-09 01:10:53

标签: c# sql

我想按日期显示不同帐户的总余额。我有这些列(帐户,日期(日期时间),余额)的SQL查询的输出。我正在使用.NET Chart并希望在X轴上显示日期并在Y轴上显示总余额。对于以下数据,数据点应为(2013-12-08 17:00,1800),(2013-12-08 17:01,1000),(2013-12-08 17:02,1600)。我已经尝试用数据填充DataTable但我需要查询它才能显示。有什么想法吗?

Account    Date                   Balance
A          2013-12-08 17:00:37    500 
B          2013-12-08 17:00:42    600
C          2013-12-08 17:00:44    700
D          2013-12-08 17:00:46    800
A          2013-12-08 17:01:22    100
B          2013-12-08 17:01:24    200
C          2013-12-08 17:01:28    300
D          2013-12-08 17:01:37    400
A          2013-12-08 17:02:20    100
B          2013-12-08 17:02:25    300
C          2013-12-08 17:02:28    500
D          2013-12-08 17:02:30    700

3 个答案:

答案 0 :(得分:1)

MySQL解决方案:

SELECT DATE_FORMAT(date, '%Y-%c-%%d %H:%i'), SUM(balance)
FROM data
GROUP BY DATE_FORMAT(date, '%Y-%c-%%d %H:%i')

返回

DATE_FORMAT(DATE, '%Y-%C-%%D %H:%I')    SUM(BALANCE)
2013-12-%d 17:00                        2600
2013-12-%d 17:01                        1000
2013-12-%d 17:02                        1600

SqlFiddle演示:http://sqlfiddle.com/#!2/9b59a/8

答案 1 :(得分:0)

@ marcinjuraszek对SQL Server 2012的回答:

SELECT FORMAT(date, 'yyyy-MM-dd HH:mm'), SUM(balance)
FROM data
GROUP BY FORMAT(date, 'yyyy-MM-dd HH:mm')

答案 2 :(得分:0)

MS SQL的答案类似,日期格式略有不同,以获得所需的分组分辨率:

SELECT CONVERT(DATETIME, LEFT(CONVERT(VARCHAR, [Date]), 120),16)), AVG([Balance])
FROM data
GROUP BY CONVERT(DATETIME, LEFT(CONVERT(VARCHAR, [Date]), 120),16))

由于v110之前的Microsoft T-SQL(SQL Server 2012)没有内置的合适的日期格式化功能,因此上面使用CONVERT函数以yyyy-MM-dd HH:mm:ss格式获取日期时间,在转换回DATETIME值进行分组和输出之前,丢弃秒数。这应该会给你一个单独的分钟级别的分组。

当然,如果您想要字符串形式的日期,请从CONVERTSELECT列表中删除外部GROUP BY语句。