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

Posted

技术标签:

【中文标题】如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?【英文标题】:How to find dates from a table with distinct TaskIds in sql server 2008? 【发布时间】: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?

【问题讨论】:

所以你每个月有不止一项任务。 一个任务一个月处理多次 一个月有多个任务 所以你每个月需要选择哪一个 一年内完成的所有任务,一个月内完成的任务,所有任务在同一个月的列中显示为月份 【参考方案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]) 

【讨论】:

以上是关于如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2008 中创建具有新名称的重复表

SQL Server 2008 - 从记录中获取地理位置

SQL中多分支If语句的性能(Sql Server 2008)

如何从临时表中检索字段名称 (SQL Server 2008)

《SQL Server 2008从入门到精通》--20180629

如何检查 SQL Server 2008 表中字符串列中的 id