根据日期仅获取每个条目中的一个

时间:2014-06-28 21:50:08

标签: sql-server webmatrix razor-2

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

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

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

4 个答案:

答案 0 :(得分:2)

尝试

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

答案 1 :(得分:1)

您可以使用一个查询执行此操作:

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"。

答案 2 :(得分:0)

我认为这样的事情应该有用(假设您希望“数字”列的最后一条记录,并且数字没有重复的日期):

select max(lastdate) as lastdate, number into #temp
from t
group by number

select * from #temp t1
inner join t on t.number = t1.number and t.lastdate = t1.lastdate

这是一个SQL小提琴:http://www.sqlfiddle.com/#!6/01357/5

(考虑到这一点,即使数字上有重复的日期,唯一不同的字段就是id列,根据您的要求,您可以选择MAX。)

答案 3 :(得分:0)

您可以在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