我有一个表'sharelist‘,具有以下属性
linkID
bool1
bool2
bool3
activityTimelinkID和activityTime是ints。布尔1-3是布尔人。
我需要一个查询,它将首先根据linkID (简单组逐语句)将行分组。最难的部分是排序。让我们假设来自'sharelist‘的第1-5行对于linkID具有相同的值,因此在结果表中合并成一个条目。如果这5行中的任何一行对于bool1、bool2或bool3的值都为true,则整个组被视为“新的”。否则,这个群体被认为是“老”的。此外,对于每个组,应该存储最大的activityTime。
我希望结果表中的所有“新”组首先由最大activityTime排序,然后由最大activityTime排序所有“旧”组。这就是我到目前为止所拥有的。
SELECT linkID, MAX(activityTime)
FROM sharelist
GROUP BY linkID发布于 2014-08-07 19:58:33
您可以使用order by子句中的表达式来完成此操作:
SELECT linkID, MAX(activityTime)
FROM sharelist
GROUP BY linkID
ORDER BY (bool1 or bool2 or bool3) desc, max(activityTime)MySQL将布尔值视为整数,因此您实际上可以按真表达式的数量排序:
SELECT linkID, MAX(activityTime)
FROM sharelist
GROUP BY linkID
ORDER BY (bool1 > 0) + (bool2 > 0) + (bool3 > 0) desc, max(activityTime)https://stackoverflow.com/questions/25191078
复制相似问题