tsql - 报告 - 按周数和年份的 SQL 组
问题描述
我有一个包含varchar(255)、datetime、
floattemperatures
列的表。我想创建一个包含 3 个参数的报告:和。mac_address
tm
temperature
mac_address
week_number
year
报告应显示maximum temperature
在mac_address
某些week_number
(01,... 50,...)中的某些year
。某些可能有超过 1 行week_number
并且year
...
数据集的 SQL 查询可能类似于
select max(temperature), mac_address, tm
from temperatures
group by mac_address
having mac_address = @mac_address and week_number = @week_number and year = @year
你知道如何正确构造查询吗?也许我还需要 3 个数据集。对于@mac_address 参数,这很容易。我会
select distinct mac_address from temperatures
但是如何使用 @week_number 和 @year 参数来做到这一点?是手动添加下拉列表值的唯一选择吗?
可能的结果可能是:当用户从参数
mac_address
001、47week_number
和year
2019中选择时
max_temperature | tm
27.8 t1
27.8 t2
27.8 t3
现在它返回 3 行。大多数时候只有一排。
解决方案
对于构建年份参数的数据集,您可以使用类似这样的方法,这将使您获得 10 年。您可以根据需要扩展:
;WITH years AS (
SELECT YEAR(DATEADD(YY,-5,GETDATE())) AS yr
UNION ALL
SELECT yr + 1
FROM years
WHERE yr < YEAR(DATEADD(YY,5,GETDATE()))
)
SELECT *
FROM years
对于 week 参数,您可以对它们进行硬编码或使用类似的东西:
;WITH weeks AS (
SELECT 1 AS wk
UNION ALL
SELECT wk + 1
FROM weeks
WHERE wk < 52
)
SELECT *
FROM weeks
在您的主要 SQL 数据集中,您可能希望使用以下内容:
select max(temperature), mac_address, tm
from temperatures
where mac_address = @mac_address
and week_number = @week_number
and year = @year
group by mac_address, tm
编辑:tm
从SELECT
和中删除GROUP BY
select max(temperature), mac_address
from temperatures
where mac_address = @mac_address
and week_number = @week_number
and year = @year
group by mac_address
推荐阅读
- javascript - Django Rest Framework + ReactJS:我的 API 有什么问题?
- variables - SSRS 更改变量值的操作
- r - 在集群上使用批处理工具提交作业的问题
- gwt - 直到哪个版本的 chrome 支持 GWT Classical Dev Mode?
- python - Python-GStreamer:使用固定参数访问回调函数内的类成员
- tabs - 如何导航超出面板范围的 Google 应用制作工具标签
- python-3.x - _pickle.PicklingError: 来自 __newobj__ args 的 args[0] 在 tensorflow 项目中有错误的类
- julia - 在 Julia 1.0 中,当昏暗进入暮光区时会发生什么?
- postgresql - PostgreSQL & BDR:BDR真的是多主控吗,2019年1.x的开源和EOL吗?
- r - 在数据框中的列表元素的第一页上查找单词