【问题标题】:Fetch only one of each entry based on date根据日期仅获取每个条目中的一个
【发布时间】:2014-06-28 21:50:08
【问题描述】:

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

【问题讨论】:

    标签: sql-server webmatrix razor-2


    【解决方案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
    

    【讨论】:

    • 那个工作就像一个魅力!非常感谢您今天为我节省了一些头发。
    【解决方案2】:

    您可以通过一个查询来做到这一点:

    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 的行”。

    【讨论】:

    • 感谢您的评论,现在我有两个工作查询!
    【解决方案3】:

    我认为这样的事情应该可以工作(假设您想要“数字”列的最后一条记录并且数字没有重复的日期):

    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 Fiddle:http://www.sqlfiddle.com/#!6/01357/5

    (进一步考虑这一点,即使有数字重复的日期,唯一不同的字段将是 id 列,您可能会根据您的要求取 MAX 。)

    【讨论】:

    • 此代码生成错误“System.Data.SqlServerCe.SqlCeException:解析查询时出错。[令牌行号=1,令牌行偏移量=42,错误令牌=进入]”
    • 是的,你是对的,我只想显示最后的数字记录
    • 看起来 SQL CE 不支持临时表。我的错。您始终可以将创建临时表的查询包装到应该可以工作的子查询中。
    【解决方案4】:

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

    【讨论】:

    • 我试过了,我不相信这个 SQL 命令在 SQL Compact 4 上工作,它会生成错误 System.Data.SqlServerCe.SqlCeException:解析查询时出错。 [令牌行号 = 1,令牌行偏移量 = 40,错误令牌 = OVER ]
    • @Tman 你是对的:ROW_NUMBER 在 SQL Server Compact Edition 中不存在。
    • @Tman - 不能在所有版本上工作 - 但在它工作的版本上可能会稍微快一些。
    猜你喜欢
    • 2022-06-11
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多