我目前正在使用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,因为它们是最后更新的条目。
答案 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