SQL查询:根据最新日期获取唯一的id/日期组合-需要提高速度

SQL查询:根据最新日期获取唯一的id/日期组合-需要提高速度,sql,sql-server,performance,Sql,Sql Server,Performance,不知道如何命名或问这个问题。假设我在两个表的联接上得到这样一个结果集,一个包含Id(C),另一个包含评级和CreatedDate(R),第一个表带有外键: ----------------------------------- | C.Id | R.Rating | R.CreatedDate | ----------------------------------- | 2 | 5 | 12/08/1981 | | 2 | 3 | 01/01/20

不知道如何命名或问这个问题。假设我在两个表的联接上得到这样一个结果集,一个包含
Id
(C),另一个包含
评级
CreatedDate
(R),第一个表带有外键:

-----------------------------------
| C.Id | R.Rating | R.CreatedDate |
-----------------------------------
| 2    | 5        | 12/08/1981    |
| 2    | 3        | 01/01/2001    |
| 5    | 1        | 11/11/2011    |
| 5    | 2        | 10/10/2010    |
我想要这个结果集(仅限最新的):

这是一个非常大的数据集,我的方法(我不会提及哪个方法,所以没有偏见)做这件事非常慢。有没有办法弄到这台电视机?它不一定必须是单个查询,而是在存储过程中


谢谢大家!

您可以使用
行编号()


您可以使用
行编号()


您可以使用
行编号()


您可以使用
行编号()


您需要一个带有行号()的CTE:


您需要一个带有行号()的CTE:


您需要一个带有行号()的CTE:


您需要一个带有行号()的CTE:


如果使用SQL Server 2008或更高版本,则应该考虑使用窗口函数。例如:

select ID, Rating, CreatedDate from (
    select ID, Rating, CreatedDate, 
        rowseq=ROW_NUMBER() over (partition by ID order by CreatedDate desc)
    from MyTable
) x
where rowseq = 1

另外,请理解,虽然这本身就是一个高效的查询,但您的总体性能在很大程度上取决于基础表,尤其是在第一时间加入表时使用的索引和解释计划等。

如果您使用的是SQL Server 2008或更高版本,应该考虑使用窗口函数。例如:

select ID, Rating, CreatedDate from (
    select ID, Rating, CreatedDate, 
        rowseq=ROW_NUMBER() over (partition by ID order by CreatedDate desc)
    from MyTable
) x
where rowseq = 1

另外,请理解,虽然这本身就是一个高效的查询,但您的总体性能在很大程度上取决于基础表,尤其是在第一时间加入表时使用的索引和解释计划等。

如果您使用的是SQL Server 2008或更高版本,应该考虑使用窗口函数。例如:

select ID, Rating, CreatedDate from (
    select ID, Rating, CreatedDate, 
        rowseq=ROW_NUMBER() over (partition by ID order by CreatedDate desc)
    from MyTable
) x
where rowseq = 1

另外,请理解,虽然这本身就是一个高效的查询,但您的总体性能在很大程度上取决于基础表,尤其是在第一时间加入表时使用的索引和解释计划等。

如果您使用的是SQL Server 2008或更高版本,应该考虑使用窗口函数。例如:

select ID, Rating, CreatedDate from (
    select ID, Rating, CreatedDate, 
        rowseq=ROW_NUMBER() over (partition by ID order by CreatedDate desc)
    from MyTable
) x
where rowseq = 1

另外,请理解,虽然这本身就是一个高效的查询,但您的总体性能在很大程度上取决于基础表,尤其是在首先连接表时使用的索引和解释计划,等等。

请用你正在使用的数据库标记你的问题。请用你正在使用的数据库标记你的问题。请用你正在使用的数据库标记你的问题。请用你正在使用的数据库标记你的问题。我正在写答案,但在我完成之前,答案突然出现,这里有一个sql文件,其中包含提供的数据和您的查询:如果您想使用它,这些都是正确的,谢谢!我的查询时间缩短了30秒!我正在写一个答案,但在我写完之前,答案突然出现了,下面是一个sql文件,其中包含了提供的数据和您的查询:如果您想使用它,这些都是正确的,谢谢!我的查询时间缩短了30秒!我正在写一个答案,但在我写完之前,答案突然出现了,下面是一个sql文件,其中包含了提供的数据和您的查询:如果您想使用它,这些都是正确的,谢谢!我的查询时间缩短了30秒!我正在写一个答案,但在我写完之前,答案突然出现了,下面是一个sql文件,其中包含了提供的数据和您的查询:如果您想使用它,这些都是正确的,谢谢!我的查询时间缩短了30秒!这些都是正确的,谢谢!我的查询时间缩短了30秒!这些都是正确的,谢谢!我的查询时间缩短了30秒!这些都是正确的,谢谢!我的查询时间缩短了30秒!这些都是正确的,谢谢!我的查询时间缩短了30秒!