【问题标题】:SQL Query, How to find the first and last value in the given table need by sequential order with conditionsSQL 查询,如何按条件按顺序查找给定表中的第一个和最后一个值
【发布时间】:2019-10-28 06:27:50
【问题描述】:

我的表中有 id,id 从 1 到 20 开始,我想要一个查询,以查找给定表中的第一条和最后一条记录,但我想要某些条件的结果。

例如:如果我有记录

1,2,3,4,5,9,10,11,12,13, 19,20

我需要像这样的 1-5、9-13、19-20 这样的结果 我需要结果

【问题讨论】:

  • 是 sqlite 还是 MySQL?它是什么版本的?
  • SQLite,如果我在 MySQL 中得到查询也没问题
  • 这是一个“差距和孤岛”问题
  • @Strawberry 什么?
  • @angel.bonev 如果我运行该查询,我会得到最后一个最小值和最大值的答案,但我需要上面提到的结果,它不是重复的问题

标签: android sql sqlite


【解决方案1】:

这是经典缝隙和岛屿问题的岛屿部分(缝隙部分是在每个岛屿之间寻找缺失值)。如果您搜索该术语,您会发现大量有关如何计算它们的资料。

一种方法(需要 Sqlite 3.25 或更新的窗口函数支持):

sqlite> CREATE TABLE ex(id INTEGER PRIMARY KEY);
sqlite> INSERT INTO ex VALUES (1),(2),(3),(4),(5),(9),(10),(11),(12),(13),(19),(20);
sqlite> WITH cte AS (SELECT id, id - row_number() OVER (ORDER BY id) AS grp FROM ex)
   ...> SELECT min(id) AS rangestart, max(id) AS rangeend FROM cte GROUP BY grp;
rangestart  rangeend  
----------  ----------
1           5         
9           13        
19          20

【讨论】:

    【解决方案2】:

    用于查找表中第一条记录的 SQL 查询:

    SELECT * FROM <table_name> ORDER BY <column_name> ASC LIMIT 1
    

    用于查找表中最后一条记录的 SQL 查询:

    SELECT * FROM <table_name> ORDER BY <column_name> DESC LIMIT 1
    

    例如:如果我有记录1,2,3,4,5,9,10,11,12,13,19,20

    我需要像这样的 1-5、9-13、19-20 这样的结果 我需要结果

    如果您需要上述结果,则可以在查询中设置 LIMIT 以获取该查询中可以有多少条记录。

    查询:

    SELECT * FROM <table_name> LIMIT <any_number>
    

    【讨论】:

    • 限制,如果我先运行查询,我会得到 1,最后是 20,但我需要上面的结果,我提到我不需要 1,20 作为结果
    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多