Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查询以从表中选择非重复值_Sql Server_Unique_Distinct_Distinct Values - Fatal编程技术网

Sql server 查询以从表中选择非重复值

Sql server 查询以从表中选择非重复值,sql-server,unique,distinct,distinct-values,Sql Server,Unique,Distinct,Distinct Values,我的表格结构如下: ID Name RunDate 10001 Item 1 12/09/2013 02:11:47 10002 Item 2 12/09/2013 01:13:25 10001 Item 1 12/09/2013 01:11:37 10007 Item 7 12/08/2013 11:02:04 10001 Item 1

我的表格结构如下:

ID        Name             RunDate
10001     Item 1           12/09/2013 02:11:47
10002     Item 2           12/09/2013 01:13:25
10001     Item 1           12/09/2013 01:11:37
10007     Item 7           12/08/2013 11:02:04
10001     Item 1           12/08/2013 10:25:00
我的问题是,此表将被发送到通讯组电子邮件,这使得电子邮件如此之大,因为该表有数百行。我想要实现的是只显示具有不同ID的记录,这些记录只显示最近的运行日期

ID        Name             RunDate
10001     Item 1           12/09/2013 02:11:47
10002     Item 2           12/09/2013 01:13:25
10007     Item 7           12/08/2013 11:02:04
你知道我该怎么做吗?我对聚合的东西不是很在行,我使用了DISTINCT,但它总是把我的查询搞得一团糟


谢谢

按应该不同的值分组,并使用
max()
获取最新日期

select id, name, max(rundate) as rundate
from your_table
group by id, name

按应该不同的值分组,并使用
max()
获取最新日期

select id, name, max(rundate) as rundate
from your_table
group by id, name

这更灵活,因为它不需要按所有列进行分组:

;WITH x AS
(
  SELECT ID, Name, RunDate, /* other columns, */
    rn = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RunDate DESC)
  FROM dbo.TableName
)
SELECT ID, Name, RunDate /* , other columns */
  FROM x
  WHERE rn = 1
  ORDER BY ID;

(由于
名称
实际上不需要分组,事实上也不应该在本表中,而
分组依据
解决方案的下一个后续问题几乎总是“如果它们有不同的值并且不能被添加到
分组依据
中,我如何将
添加到输出中?”

这更灵活,因为它不需要按所有列进行分组:

;WITH x AS
(
  SELECT ID, Name, RunDate, /* other columns, */
    rn = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RunDate DESC)
  FROM dbo.TableName
)
SELECT ID, Name, RunDate /* , other columns */
  FROM x
  WHERE rn = 1
  ORDER BY ID;

(由于
名称
实际上不需要分组,事实上也不应该在本表中,而
分组依据
解决方案的下一个后续问题几乎总是“如果它们有不同的值并且不能被添加到
分组依据
中,我如何将
添加到输出中?”

谢谢您!这很有帮助!不过,还有一个问题。。。如果我还想输出每个组/分区下包含的总行数,该怎么办?有什么方法可以做到这一点吗?当然,在内部添加
,c=COUNT(*)覆盖(按ID划分)
,在外部添加
,c
。谢谢!这很有帮助!不过,还有一个问题。。。如果我还想输出每个组/分区下包含的总行数,该怎么办?有什么方法可以做到这一点吗?当然,在内部添加
,c=COUNT(*)(按ID划分)
和外部添加
,c