我是SQL的新手,所以我在这里摸索了一下。我有下表:
Entered Generalist Item
12/31/2012 07:26:50 Tom Smith RTW/Updates
12/31/2012 07:30:10 Terrie Bradshaw Posters
12/31/2012 07:38:16 Jen Lopez Client Assistance/Request
12/31/2012 07:48:00 Tom Smith RTW/Updates
12/31/2012 07:50:29 Mike Smith RTW/Updates
12/31/2012 07:55:32 Tom Smith Client Assistance/Request
我试图找出代表最后一次分配项目的时间。所以我在列上寻找最小值。我的查询将查看项目“RTW /更新”,这是在日期范围和返回Tom Smith之间输入的较早时间。例如,用户在12/31/2012和2013年1月1日之间查询RTW / Update,答案是Tom Smith。
这是我到目前为止所做的,但未能弄清楚日期之间的部分:
SELECT MIN(entered), generalist, item
FROM dataTable
这就是它。
答案 0 :(得分:2)
我可能不明白你想要什么,但是如果你想根据最短的日期让一个人回来,你需要计算出最短的约会日期,并用它来找到那个人:
select
*
from
datatable
where
entered =
(
select
min(entered) as MinDate
from
DataTable
where
Item = 'RTW/Updates'
)
and item = 'RTW/Updates'
你也可以使用CTE:
; with LowDate as
(select
min(entered) as MinDate
from
DataTable
where
Item = 'RTW/Updates' )
select
*
from
datatable
inner join LowDate
ON entered = LowDate.MinDate
and item = 'RTW/Updates'
答案 1 :(得分:2)
您正在寻找窗口功能。这是一个例子:
select generalist, item, entered
from (SELECT generalist, item, entered,
row_number() over (partition by item order by entered desc) as seqnum
FROM dataTable
) t
where seqnum = 1;
函数row_number()
枚举每个项目的行(基于partition by
子句),以1
开头。由于1
子句,order by
的行将具有最新日期。
外部查询只选择seqnum = 1
的行,这是每个项目的最新记录。
答案 2 :(得分:1)
我相信这应该有效(@变量是传递给你程序的参数)
SELECT MIN(entered), generalist, item
FROM dataTable
WHERE item = @itemParm
AND entered BETWEEN @enteredStart AND @enteredEnd
GROUP BY generalist, item
答案 3 :(得分:0)
SELECT MIN(entered) MinDate, generalist, item
FROM dataTable
GROUP BY generalist, item
如果在select语句中使用了聚合函数,并且还在选择任何聚合函数中未包含的其他列,则必须通过添加GROUP BY子句并提及名称来告诉sql server如何聚合该列。 SELECT语句中的所有列,但不包含在任何聚合函数中。
获取最新日期,您将需要获得最大(数字日期最大),您将需要使用MAX()函数而不是MIN(),MIN()将返回您的最旧(最小日期)列。
SELECT MAX(entered) MinDate, generalist, item
FROM dataTable
GROUP BY generalist, item
答案 4 :(得分:0)
使用GROUP BY
SELECT MAX(entered) MinDate, generalist, item FROM dataTable
GROUP BY Generalist, Item
答案 5 :(得分:0)
只需在答案之前添加一些内容(基本上是正确的):为了找到最新日期,您必须使用MAX()
代替MIN()
。