Sql server 根据日期只获取每个条目中的一个

Sql server 根据日期只获取每个条目中的一个,sql-server,webmatrix,razor-2,Sql Server,Webmatrix,Razor 2,我目前正在使用SQL Compact 4和Razor,我试图根据最新日期只获取每个条目中的一个 id Name Number LastDate 1乔1111 2014-01-01 2 Sam 2222 2014-01-02 3乔1111 2014-04-11 4 Sam 2222 2014-04-12 5李3333 2014-04-12 我正在尝试将数据写入webgrid,但我找不到只加载id 3、4和5的正确SQL语句,因为它们是最后更新的条目。我认为类似的方法应该可以工作(假设您希望最后一条

我目前正在使用SQL Compact 4和Razor,我试图根据最新日期只获取每个条目中的一个

id Name Number LastDate
1乔1111 2014-01-01
2 Sam 2222 2014-01-02
3乔1111 2014-04-11
4 Sam 2222 2014-04-12
5李3333 2014-04-12


我正在尝试将数据写入webgrid,但我找不到只加载id 3、4和5的正确SQL语句,因为它们是最后更新的条目。

我认为类似的方法应该可以工作(假设您希望最后一条记录按“数字”列显示,并且没有重复的日期按数字显示):

下面是一个SQL小提琴:


(进一步考虑一下,即使数字上有重复的日期,唯一不同的字段是id列,您可以根据自己的要求最大化id列。)

您可以通过一个查询完成此操作:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.number = t.number and
                        t2.lastdate > t.lastdate
                 );
这实现了逻辑:“从
t
中获取所有行,其中没有具有相同
number
的行和更晚的
lastdate

您可以在OVER语句中使用row_number(),如下所示:

select id, name, number, lastdate
from
(
  select 
    id, name, number, lastdate,
    row_number() OVER (PARTITION BY Number ORDER BY LastDate DESC) as dateord
  from table
) t
where t.dateord = 1
试一试

SELECT id, Name, Number, LastDate FROM yourTable t1 INNER JOIN
    (SELECT Number, MAX(LastDate) AS MaxDate FROM yourTable GROUP BY Number) t2
ON t1.Number = t2.Number AND t1.LastDate = t2.MaxDate

此代码生成一个错误“System.Data.SqlServerCe.SqlCeException:解析查询时出错。[令牌行编号=1,令牌行偏移量=42,令牌插入错误=into]”,是的,您是正确的,我只想显示最后一条记录,就像SQL CE不支持临时表一样。我的错误。您始终可以将创建临时表的查询包装到一个子查询中,该子查询应该可以工作。我尝试过,但我不相信此SQL命令在SQL Compact 4上工作,它会生成并出错System.Data.SqlServerCe.SqlCeException:分析查询时出错。[Token line number=1,Token line offset=40,Token in error=OVER]@Tman你说得对:SQL Server Compact Edition中不存在行号。@Tman-不适用于所有版本,但在它适用的版本上可能会稍微快一点。那一个非常有效!非常感谢你今天帮我留了一些头发。谢谢你的评论,现在我有两个工作问题!
SELECT id, Name, Number, LastDate FROM yourTable t1 INNER JOIN
    (SELECT Number, MAX(LastDate) AS MaxDate FROM yourTable GROUP BY Number) t2
ON t1.Number = t2.Number AND t1.LastDate = t2.MaxDate