我正在开发一个应用程序,其中有一个任务表,其中需要一年的详细信息。要求是在给定的月份中找到不同的taskId。taskid在一个月内重复多次,具体取决于任务处理的时间。
任务表的列有taskId,date,workDoneinHours,status。
我尝试过以下代码
declare @FROMDATE AS date = '01/01/2014' declare @ENDDATE AS date = '12/31/2014'
select distinct Task_ID
from Task
WHERE convert(date, Task.[date])>=@FROMDATE AND
convert(date, Task.[date])<=@ENDDATE
order by Task_ID
上面的代码返回了我整个月所需的不同任务ID。问题是,当我用taskid写日期时,不会再返回任何记录。
如何在月份中找到不同的ID?
答案 0 :(得分:0)
如果没有错,这就是你需要的。
SELECT Task_ID,
[date]
FROM (SELECT Row_number()OVER(partition BY Year([date]), Month([date]) ORDER BY [date]) AS rn,
Task_ID,
[Date]
FROM Task
WHERE CONVERT(DATE, Task.[date]) >= @FROMDATE
AND CONVERT(DATE, Task.[date]) <= @ENDDATE) a
WHERE rn = 1
注意:在order by
根据您的要求更改订单。
答案 1 :(得分:0)
试试这个解决方案,它会给出一个月task_id
s:
DECLARE @FROMDATE AS DATE = '01/01/2014'
DECLARE @ENDDATE AS DATE = '12/31/2014'
SELECT Task_ID,
Datepart(month, [date]) as [Month]
FROM Task
WHERE CONVERT(DATE, Task.[date]) >= @FROMDATE
AND CONVERT(DATE, Task.[date]) <= @ENDDATE
GROUP BY Task_ID,Datepart(month, [date])
ORDER BY Datepart(month, [date])