用于查找最小日期的SQL语句

时间:2013-12-02 21:59:24

标签: sql sql-server

我是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

这就是它。

6 个答案:

答案 0 :(得分:2)

我可能不明白你想要什么,但是如果你想根据最短的日期让一个人回来,你需要计算出最短的约会日期,并用它来找到那个人:

select
*
from
datatable
where
entered = 
(
select
min(entered) as MinDate
from
DataTable
where
Item = 'RTW/Updates'
  )
and item = 'RTW/Updates'

SQL Fiddle

你也可以使用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'

More SQL Fiddle!

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