【发布时间】:2015-09-29 19:51:24
【问题描述】:
我有一张表格,用户可以输入每日人口。当天特定设施中有多少人。该表与此类似:
select * from stat_summary where MONTH(report_date) = 9
结果:
stat_summary_id | report_date | facility | adp
----------------------------------------------------
29 |2015-09-01 | YORK | 1855
30 |2015-09-02 | YORK | 1750
31 |2015-09-04 | YORK | 1655
32 |2015-09-04 | YORK | 1699
我想要做的是计算按月分组的平均每日人口。我想使用MAX(report_date),以防必须重新输入更正的值。我的查询看起来像:
SELECT
MONTH(t.report_date) as 'report_month',
SUM(ss1.adp)/DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,MONTH(t.report_date)),0))),
DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,MONTH(t.report_date)),0)))
FROM
stat_summary ss1
INNER JOIN
(SELECT MAX(stat_summary_id) as 'stat_summary_id', report_date
FROM stat_summary
GROUP BY report_date
) t ON t.stat_summary_id = ss1.stat_summary_id
WHERE
ss1.facility_id = 'YORK'
AND MONTH(t.report_date) = 9
GROUP BY
MONTH(t.report_date)
ORDER BY
MONTH(t.report_date)
我引用了这个线程: Dividing a value by number of days in a month in a date field in SQL table
我能够看到如何动态除以当月的天数,但看起来它是除以当前月份(10 月)有 31 天,当我需要查询除以引用的月份为 9 月,有 30 天。
目前我的结果如下:
adp 的值应该是 176.8,因为 9 月有 30 天,而不是 31 天。
【问题讨论】:
-
您可以创建一个标量 UDF,根据您传递给它的月份返回一个月中的天数。
标签: sql sql-server sql-server-2008