如何在sql server 2008中从具有不同TaskIds的表中查找日期?

时间:2015-01-22 09:50:52

标签: sql asp.net sql-server sql-server-2008

我正在开发一个应用程序,其中有一个任务表,其中需要一年的详细信息。要求是在给定的月份中找到不同的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?

2 个答案:

答案 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])