【发布时间】:2011-08-10 13:32:48
【问题描述】:
我有一个交易数据库 (Access 2007),它以每小时、每天和每月的间隔记录。我想以一种有意义的方式查看它们(而不是按小时计算的能源使用量,这是它的存储方式,我想要 2011 年 1 月的所有使用量)。我要操作的表具有这种通用格式:
CustID|CustomerCode|TransactionDate|(Transaction Hour depending on table)|Usage
所以如果我想拿一张这样的桌子并制作一个看起来像这样的视图
BillingPeriod|Usage(mWh)
1/2011 |500
2/2011 |600
3/2011 |700
etc
我该怎么做呢?交易日期可以是任意日期,交易时间可以是1-24。查询本身似乎并不难,类似于:
SELECT TransactionDate, SUM(Usage)
FROM UsageTable
Where (TransactionDate Between [Some Start Date] AND[Some End Date])
GROUP BY TransactionDate;
问题在于格式。我显然不能按事务日期对我想要的结果进行分组,我只是写了它,所以查询在语义上是正确的。也许我可以做类似的事情
SELECT Mid(TransactionDate,0,2) + Mid(TransactionDate, 6, 4)?
任何帮助将不胜感激
【问题讨论】:
-
您需要按 TransactionDate 分组,但您必须将日期转换为 MM/YYYY,以便您的分组正常工作。在 SQL Server 中,这很容易做到,但我注意到您要求 ms-access,所以我不确定是否支持相同的日期时间函数。在 SQL Server 中,您可以使用 datepart 函数获取月份和年份,DATEPART(yyyy, TransactionDate) 将获取年份,DatePart(mm,TransactionDate) 将获取月份。因此,您可以按类型转换 (Datepart(yyyy,TransactionDate) as varchar(4))+'-'+(Datepart(mm,TransactionDate) as varchar(2))
-
我刚刚确认,access中支持MONTH()和YEAR()函数
-
将值转换为字符串,然后将它们连接起来,以完成日期运算,是 Bad Practice! 要执行您建议的操作,只需使用 @ 987654325@(使用SQL Server时,将m替换为MONTH,示例为MS Access版本。)
-
@Dems 你说的日期算术在哪里?你是在调用 GROUP BY 日期算术吗?
-
@HansUp - 将日期或日期时间转换为仅限月份的值是日期算术。