如何从 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_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])
【讨论】:
以上是关于如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2008 中创建具有新名称的重复表
SQL中多分支If语句的性能(Sql Server 2008)
如何从临时表中检索字段名称 (SQL Server 2008)