android - 对 sqlite 记录进行分组和排序

标签 android sqlite android-sqlite

我有一个包含以下列的表格

_id INTEGER PRIMARY KEY,
body TEXT,
category TEXT,
is_readed INTEGER,
date INTEGER

我有记录看例子

我有以下查询

SELECT
    _id, body, category, is_readed
FROM 
    table
GROUP BY
    category
ORDER BY
    category, is_readed, date DESC

我想显示类别的只有第一条记录(不管 is_readed 是 0 还是 1)但我想首先显示(如果存在)is_readed == 1。但有时会显示带有 is_readed == 0 的第一条记录,即使存在带有 is_readed == 1

的记录

注意:我使用的是 ContentProvider 而不是原始查询

更新

在尝试了一段时间之后,这个粗略的工作

SELECT
    _id, body, category, MIN(is_readed) as is_readed
FROM 
    table
GROUP BY
    category
ORDER BY
    category, date DESC

我还在做测试,但我还是不相信

例子

SELECT * FROM table ORDER BY category, is_readed ASC, date DESC;

_id|category|body|is_readed|date
19|Hogar|message1|1|1371449889136
16|Hogar|message2|1|1371449806704
15|Hogar|message2|1|1371449803825
11|Hogar|message3|1|1371448915930
5|Hogar|message4|1|1371447395055
4|Hogar|message4|1|1371447391394
23|Linea blanca|message2|0|1371450430216
26|Linea blanca|message1|1|1371450719124
24|Linea blanca|message4|1|1371450431604
21|Linea blanca|message1|1|1371449893835
20|Linea blanca|message1|1|1371449891488
17|Linea blanca|message3|1|1371449810104
13|Linea blanca|message3|1|1371448994173
12|Linea blanca|message2|1|1371448917864
6|Linea blanca|message4|1|1371447397387
22|Vehiculos|message3|0|1371450428817
14|Vehiculos|message3|0|1371449801144
25|Vehiculos|message4|1|1371450717115
18|Vehiculos|message4|1|1371449887682
10|Vehiculos|message1|1|1371448422563
9|Vehiculos|message4|1|1371448419438
8|Vehiculos|message3|1|1371448416315
7|Vehiculos|message4|1|1371448395644
3|Vehiculos|message3|1|1371447388887
2|Vehiculos|message1|1|1371447386126
1|Vehiculos|message2|1|1371447383557

我的更新

SELECT
    _id, body, category, MIN(is_readed) as is_readed
FROM 
    table
GROUP BY
    category
ORDER BY
    category, date DESC

_id|category|body|is_readed|date
4|Hogar|message4|1|1371447391394
23|Linea blanca|message2|0|1371450430216
14|Vehiculos|message3|0|1371449801144

@Hoan Nguyen 回答

4|Hogar|message4|1|1371447391394
6|Linea blanca|message4|1|1371447397387
1|Vehiculos|message2|1|1371447383557

预期结果

19|Hogar|message1|1|1371449889136
23|Linea blanca|message2|0|1371450430216
22|Vehiculos|message3|0|1371450428817

最佳答案

我必须在我的 ContentProvider 中实现原始查询以及子查询,但我认为可以在没有子查询的情况下执行

SELECT
    _id, body, category, is_readed, date
FROM
(
    SELECT
        _id, body, category, is_readed, date
    FROM 
        table
    GROUP BY
        is_readed, category
    ORDER BY
        category ASC, is_readed DESC, date DESC
)
GROUP BY
    category

关于android - 对 sqlite 记录进行分组和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141970/

相关文章:

android - 将 Gps 作为后台服务运行并将接收到的当前位置数据与 Sqlite 中的值进行比较?

android - 如何将数据库记录传递给第二个 Activity 并使用 ListView 显示在其中?

android - 我从数据库中得到一个Cursor,然后在数据库中修改一行,Cursor中的数据会不会改变?

java - 文件已上传但未显示在 Firebase 实时数据库中 - Android Studio

ios - 一个应用程序可以访问另一个应用程序的 sqlite 表吗? - iPhone iOS

python - Cython 回调中的段错误

SQLite.net 数据库与 Xamarin.Forms 应用程序

java.lang.RuntimeException : Unable to start activity ComponentInfo: Stub 错误

android - 在twitter4j访问directmessage时报错显示 "unable to parse ' 357786694 1' as integer"

android - 更好的做法 : reusing RecyclerViewAdapter or separate instance for each?