【问题标题】:How to find dates from a table with distinct TaskIds in sql server 2008?如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?
【发布时间】:2015-01-22 09:50:52
【问题描述】:

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

【问题讨论】:

  • 所以你每个月有不止一项任务。
  • 一个任务一个月处理多次
  • 一个月有多个任务
  • 所以你每个月需要选择哪一个
  • 一年内完成的所有任务,一个月内完成的任务,所有任务在同一个月的列中显示为月份

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


【解决方案1】:

如果没有错,这就是你所需要的。

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根据您的要求更改顺序。

【讨论】:

    【解决方案2】:

    试试这个解决方案,它会按月提供task_ids:

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

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      相关资源
      最近更新 更多