【问题标题】:Select Top 1 row for distinct id sqlite为不同的 id sqlite 选择前 1 行
【发布时间】:2014-03-22 10:29:08
【问题描述】:

我得到了以下表格内容:

> id    text        time
>      1     Hi          2
>      2     Hello       1
>      1     Mr. SP      3
>      3     KK          1
>      2     TT          2
>      1     Sample      1 
>      1     App         4

我需要为带有文本的 id 选择不同的值,因此输出应该是:

id     text      time
 1      App       4
 2      TT        2
 3      KK        1

谁能帮我解决这个问题。

我正在使用 Sqlite

谢谢

【问题讨论】:

    标签: mysql ios sql database sqlite


    【解决方案1】:
    select b.* 
    from 
    (
    select id, max(time) as time
    from yourtable
    group by id) a inner join yourtable b on a.time = b.time and a.id = b.id
    

    工作演示:http://sqlfiddle.com/#!5/fbb87/5

    【讨论】:

    【解决方案2】:

    您似乎想要最大时间的值。以下通常是获得此信息的有效方法:

    select t.*
    from table t
    where not exists (select 1 from table t2 where t2.id = t.id and t2.time > t.time);
    

    这就是说:“从表中获取所有行,其中id 没有更大的id 行”。使用table(id, time) 上的索引,这可能是表达此查询的最有效方式。

    【讨论】:

      【解决方案3】:
      select * from (
      select id,[text], 
      ROW_NUMBER() OVER (PARTITION BY id ORDER BY [time] desc) as rn
      from [table]) as cte
      where rn = 1
      

      【讨论】:

      • SQLiteManager: 可能的 SQL 语法错误:with cte as( select id,[mytext], ROW_NUMBER() OVER (PARTITION BY id ORDER BY [mytime] desc) as rn from [mytable]) select * from cte where rn = 1 [ near "with": syntax error ] 异常名称:NS_ERROR_FAILURE 异常消息:组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]
      • sqlite 不支持 cte 表达式:stackoverflow.com/questions/18593068/…
      • 我修改了,请检查一下。
      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 2018-06-14
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 2018-03-26
      • 1970-01-01
      相关资源
      最近更新 更多