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

用于查找最小日期的SQL语句,sql,sql-server,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/

我是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/Updates”项,它是在日期范围和返回Tom Smith之间输入的较早时间。例如,用户查询2012年12月31日至2013年1月1日之间的RTW/Update,答案是Tom Smith

到目前为止,我已经了解到了这一点,但还无法确定日期之间的部分:

    SELECT MIN(entered), generalist, item
FROM dataTable
差不多就是这样

SELECT MIN(entered) MinDate, generalist, item
FROM dataTable
GROUP BY generalist, item
当您在select语句中使用了聚合函数,并且还选择了任何聚合函数中未包含的其他列时,您必须通过添加GROUP by子句并提及select语句中但未包含在任何聚合中的所有列的名称来告诉sql server如何聚合该列功能

要获取最新日期,您需要获取最大的日期(最大的数字日期),并且需要使用MAX()函数而不是MIN(),MIN()将返回列中最早的日期(最小的日期)

SELECT MAX(entered) MinDate, generalist, item
FROM dataTable
GROUP BY generalist, item
当您在select语句中使用了聚合函数,并且还选择了任何聚合函数中未包含的其他列时,您必须通过添加GROUP by子句并提及select语句中但未包含在任何聚合中的所有列的名称来告诉sql server如何聚合该列功能

要获取最新日期,您需要获取最大的日期(最大的数字日期),并且需要使用MAX()函数而不是MIN(),MIN()将返回列中最早的日期(最小的日期)

SELECT MAX(entered) MinDate, generalist, item
FROM dataTable
GROUP BY generalist, item
分组使用

SELECT MAX(entered) MinDate, generalist, item FROM dataTable
GROUP BY Generalist, Item
分组使用

SELECT MAX(entered) MinDate, generalist, item FROM dataTable
GROUP BY Generalist, Item

在此之前,只需在答案中添加一些内容(基本上是正确的):为了查找最新日期,您必须使用
MAX()
,而不是
MIN()
,只需在此之前在答案中添加一些内容(基本上是正确的):为了查找最新日期,你必须使用
MAX()
而不是
MIN()

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

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'

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

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'

我认为这应该有效(其中@variables是传递给您的过程的参数)


我相信这应该是可行的(其中@variables是传递给您的过程的参数)


您正在寻找窗口功能。以下是一个例子:

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\u number()
1
开始枚举每个项目的行(基于
划分的子句)。带有
1
的行将具有最近的日期,因为
order by
子句


外部查询只选择seqnum=1的行,这是每个项目的最新记录。

您正在查找窗口函数。以下是一个例子:

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\u number()
1
开始枚举每个项目的行(基于
划分的子句)。带有
1
的行将具有最近的日期,因为
order by
子句

外部查询只选择
seqnum=1
——这是每个项目的最新记录的行。

如果要“最后一次”,是否要最大日期?你的答案是迈克·史密斯而不是汤姆·史密斯?如果你想要“最后一次”,你不想要最长的日期吗?你的答案是迈克·史密斯而不是汤姆·史密斯?