【问题标题】:syntax error when using row_number in sqlite3在 sqlite3 中使用 row_number 时出现语法错误
【发布时间】:2018-05-14 14:10:12
【问题描述】:

我想通过 row_number 函数删除重复的基于 How to get get Unique Records based on multiple columns from a table 。但是被语法错误阻止。 我的用例如下:

我的sql如下:

select demo.*, 
      row_number() over (partition by id order by creator desc) as rn 
from demo

但它告诉我:

“(”附近:语法错误:

我不知道发生了什么,我做了一些搜索,例如How to use ROW_NUMBER in sqlite 。不幸的是,我仍然无法弄清楚我犯了什么错误。任何事情都会不胜感激。

【问题讨论】:

  • SQLite 不支持 ROW_NUMBER
  • 请使用INSERTstatements 来显示数据,而不是图像。
  • SQLite 3.25 及以上版本支持窗口函数。但是谁能建议为什么 C# 中的 System.Data.SQLite 返回语法错误?有什么要配置的吗?

标签: sql sqlite


【解决方案1】:

SQLite 支持 window functions,因为 version 3.25,所以原来的查询现在应该可以工作了。

【讨论】:

    【解决方案2】:

    如 cmets 中所述,SQLite 不支持row_number() 或其他窗口函数。您可以使用相关子查询:

    select d.*
    from demo d
    where d.creator = (select max(d2.creator) from demo d2 where d2.id = d.id);
    

    使用demo(id, creator) 上的索引,即使在支持row_number() 的数据库中,它通常也具有更好的性能。

    【讨论】:

      【解决方案3】:

      改用subquery

      select d1.* 
      from demo d1
      where primarykey = (select d2.primarykey
                          from demo d2
                          where d2.id = d1.id
                          order by d2.creator desc
                          LIMIT 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 2013-10-20
        • 1970-01-01
        相关资源
        最近更新 更多