group_concat sqlite 和 order by

Posted

技术标签:

【中文标题】group_concat sqlite 和 order by【英文标题】:group_concat sqlite and order by 【发布时间】:2013-02-04 21:18:39 【问题描述】:

我正在尝试在 sqlite3 的 group_concat 中订购。 mysql 不支持这种方式,所以我不能这样做:

group_concat(logID order by logDateTime DESC)

我的完整查询在这里,我需要按 logDateTime 排序 logID。我在这里读到了一个子查询方法:Sqlite group_concat ordering,但我无法让它在我的查询中工作。

SELECT logID,
       NULL AS sessionID,
       logDateTime,
       NULL AS sessionName,
       NULL AS NamesInRandomOrder
FROM logs
WHERE sessionID IS NULL

UNION ALL

SELECT NULL,
       sessions.sessionID,
       MAX(logDateTime),
       sessions.sessionName,
       group_concat(logID)
FROM logs
JOIN sessions ON logs.sessionID = sessions.sessionID
GROUP BY sessions.sessionID

ORDER BY 3 DESC

【问题讨论】:

Sqlite group_concat ordering的可能重复 【参考方案1】:

这对子查询进行排序,但 SQLite 不保证在所有情况下都保持顺序:

SELECT logID,
       NULL AS sessionID,
       logDateTime,
       logName,
       NULL AS NamesInRandomOrder
FROM logs
WHERE sessionID IS NULL

UNION ALL

SELECT NULL,
       sessionID,
       MAX(logDateTime),
       sessionName,
       group_concat(logName)
FROM (SELECT sessions.sessionID AS sessionID,
             logDateTime,
             sessionName,
             logName
      FROM logs JOIN sessions ON logs.sessionID = sessions.sessionID
      ORDER BY sessions.sessionID,
               logName)
GROUP BY sessionID

ORDER BY 3 DESC

【讨论】:

再次感谢您!有点令人沮丧,我离我需要的东西有多近,只是被 sqlite 的有限性质所阻碍。您是否知道任何替代方法来确保我的 logID 按 logDateTime 排序返回。我的最终应用程序实际上将有几列需要返回,就像上面显示的 logID 一样,所有这些列都需要按 logDateTime 列出/排序。

以上是关于group_concat sqlite 和 order by的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite Android order by & group_concat

获取 SQLite 中 GROUP_CONCAT 的所有 id

SQLite group_concat 返回相同数据的多个实例,不能使用 DISTINCT

Sqlite group_concat 排序

SQLite:group_concat 似乎只拉第一行?

Sqlite group_concat 选择“特殊需要”