如何从SQLite中的表中选择最新的100个不同的条目?

如何从SQLite中的表中选择最新的100个不同的条目?,sqlite,Sqlite,我一直在努力解决以下任务,尽管看起来很容易: 从SQLite中的表中选择最新的100个不同条目 详细地 我在一个基于Objective-C的iOS 11+项目中使用SQLite。应用程序数据库在表中存储ToDo条目列表: ID | Date | Note ----+--------------+--------- 1 | 2019-10-01 | ANote 1 | 2019-10-10 | Note1 2 | 2019-10-11 | Note

我一直在努力解决以下任务,尽管看起来很容易:

从SQLite中的表中选择最新的100个不同条目

详细地 我在一个基于Objective-C的iOS 11+项目中使用SQLite。应用程序数据库在表中存储ToDo条目列表:

ID  |  Date        |  Note
----+--------------+---------
1   |  2019-10-01  |  ANote
1   |  2019-10-10  |  Note1
2   |  2019-10-11  |  Note2 
3   |  2019-10-12  |  Note1 
现在,我想在此表中查询最新的100个不同注释:

按日期按降序排列表格 搜索条目并将注释添加到结果中(如果注释不在结果中) 找到100个不同的音符后停止 听起来很简单,不是吗:-

我试过的 这当然不起作用,因为它不寻找不同的值。注1包含两次。。。。但是,它会以正确的日期顺序返回注释

现在,注释1只按预期包含一次,但是日期顺序不再正确

SELECT DISTINCT(Note), Date FROM ToDo ORDER BY Date DESC LIMIT 100

  Note1
  Note2
  Note1
  ANote
在SELECT语句中包含日期将导致正确的日期顺序。到目前为止,结果不再是不同的

SELECT Note FROM ToDo GROUP BY Note ORDER BY Date DESC LIMIT 100

  SQLite on iOS:       SQLiteBrowser on Mac

  Note2                Note1
  Note1                Note2
  ANote                ANote
当在Mac上的SQLiteBrowser中测试它时,它确实起作用,但当在iOS应用程序中运行它时,它失败了。在iOS上,这种方法与DISTINCTNote存在相同的问题,并且交付了错误的日期顺序

SELECT DISTINCT(Note) FROM (SELECT Note FROM Bookings ORDER BY Date DESC) AS n LIMIT 100

  Note2
  Note1
  ANote

SELECT Note FROM (SELECT Note FROM Bookings ORDER BY Date DESC) AS n GROUP BY Note LIMIT 100

  ANote
  Note1
  Note2
同样,没有正确的数据顺序

所以,我的想法越来越少了。iOS上的SQLite似乎有些特别之处,即按注释顺序按日期从ToDo组中选择注释DESC LIMIT 100不起作用


当然,我可以在代码中解决这个问题。但是,在SQL中如何解决这个问题呢?

< p>你的问题来自于你需要指定每个不同的注释要考虑哪一个日期,以防有多重。您可以通过按注释分组并取最大值或最小值(以您想要的日期为准)来解决此问题:

SELECT Note, MAX(Date) AS Date 
FROM ToDo 
GROUP BY Note 
ORDER BY MAX(Date) DESC LIMIT 100
这行吗?选择DISTINCTNote,MAXDate FROM ToDo ORDER BY Date DESC LIMIT 100-同时,避免使用名为Date的列,因为它是保留字。
SELECT DISTINCT(Note) FROM (SELECT Note FROM Bookings ORDER BY Date DESC) AS n LIMIT 100

  Note2
  Note1
  ANote

SELECT Note FROM (SELECT Note FROM Bookings ORDER BY Date DESC) AS n GROUP BY Note LIMIT 100

  ANote
  Note1
  Note2
SELECT Note, MAX(Date) AS Date 
FROM ToDo 
GROUP BY Note 
ORDER BY MAX(Date) DESC LIMIT 100