如何在我的SQL查询中创建一个循环,该循环将查找每年的每个星期并返回每周的前10个值?
问题描述:
我在写一个查询,它返回人每周提交的总数。喜欢下面...如何在我的SQL查询中创建一个循环,该循环将查找每年的每个星期并返回每周的前10个值?
Person WeekNumber Total
ABC 1 12
ADE 1 10
ACD 1 8
LKJ 2 15
HJK 2 14
FGH 2 12
到目前为止,我有查询做除了能够从每周选择顶部的人之外的一切。我想我可能需要使用循环来做到这一点,但只是想看看是否有人可能有更好/更容易的想法?
这里是我的查询:
Select sub.Person, sub.WeekNumber, sum(sr_id_count) as TotalSRID
from
(
SELECT
Person,
DATEDIFF(week, '2016-12-25', create_date) AS WeekNumber,
count(SR_ID) as SR_ID_COUNT
from [dbo].[tbl_Hist]
where create_date >= '01/01/2017'
and SR_STatus <> 'Canceled'
and Created_by <> 'System'
group by person, create_date
) sub
group by sub.Person, sub.WeekNumber
order by WeekNumber, TotalSRID desc
答
的语法是SQL Server的,所以我会认为这是你正在使用的数据库。如果是这样,你可以使用row_number()
。每周获得最高的人:
select *
from (select Person, datediff(week, '2016-12-25', create_date) AS WeekNumber,
count(SR_ID) as SR_ID_COUNT,
row_number() over (partition by datediff(week, '2016-12-25', create_date order by count(SR_ID) desc) as seqnum
from [dbo].[tbl_Hist]
where create_date >= '2017-01-01' and SR_STatus <> 'Canceled' and
Created_by <> 'System'
group by person, datediff(week, '2016-12-25', create_date)
) sub
where seqnum = 1;
如果你想每周前10名,然后使用seqnum <= 10
。
+0
这是近乎完美的,但一个小时我一直试图将这部分代码收回来,因为它是必要的,我不能让它仍然给我正确的结果。 AGH。 总和(sr_id_count)作为TotalSRID 从 ( 选择 人, DATEDIFF(周, '2016年12月25日',CREATE_DATE)AS WeekNumber, 计数(SR_ID)作为SR_ID_COUNT 伯爵是第一位的,然后计数的总和,因为我需要每周的总人数。任何你知道把(总数(count(sr_ID))在那里加入的方法? – SMBRADBE
您的语法是SQL Server,但问题是标记为MySQL。 –
我道歉,编辑! – SMBRADBE