表:uuid,版本,日期时间版本不是唯一的,但其思想是只获取给定uuid的最新日期时间的行SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc...当然会获取datetime asc结果--有没有一种方法可以将group by“预先排序”到desc,这样就只会获取最新的版本?
SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc
laawzig21#
由于表中只有这3个字段,并且您正在通过uid进行过滤,因此您可以只使用MAX而不使用JOIN:
SELECT version, MAX(datetime) MaxdatetimeFROM tableWHERE uuid='bla'GROUP BY version
SELECT version, MAX(datetime) Maxdatetime
FROM table
WHERE uuid='bla'
GROUP BY version
但是,如果表中有更多的字段,或者您没有通过uid进行过滤-您需要首先获取每个版本的MAX日期时间,然后选择行:
uid
SELECT t.uuid, t.version, t.datetime FROM table t JOIN ( SELECT version, MAX(datetime) Maxdatetime FROM table WHERE uuid='bla' GROUP BY version) r ON t.version = r.version AND t.datetime = r.MaxdatetimeWHERE t.uuid='bla'ORDER BY t.datetime desc
SELECT t.uuid, t.version, t.datetime
FROM table t JOIN (
) r ON t.version = r.version AND t.datetime = r.Maxdatetime
WHERE t.uuid='bla'
ORDER BY t.datetime desc
3npbholx2#
SELECT * FROM (SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table GROUP BY version;
SELECT * FROM
(SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table
GROUP BY version;
z5btuh9x3#
对我来说有一个更好的方法,你可以添加一个desc到group by:SELECT * FROM table WHERE uuid ='bla 'GROUP BY版本说明为什么它的作品是因为我的id的产生,所以总是最新的id意味着最新的日期时间
desc
kcwpcxri4#
我在php上使用了一个单独的方法来获取id并将其放入数组中。然后在另一个SQL查询中,我通过查找ID来搜索数据
$ids = array();$sql = "SELECT pid FROM table_name WHERE DATE(column_name)='yyyy-mm-dd' ORDER BY column_name ASC";$result = $conn->query($sql);if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) {if (!in_array($row['value'], $ids)) { array_push($ids, $row['value']);} }}
$ids = array();
$sql = "SELECT pid FROM table_name WHERE DATE(column_name)='yyyy-mm-dd' ORDER BY column_name ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if (!in_array($row['value'], $ids)) {
array_push($ids, $row['value']);
}
然后呢
$sql = "SELECT * FROM table_name WHERE id IN (".implode(',', $ids).") ORDER BY column_name ASC";
4条答案
按热度按时间laawzig21#
由于表中只有这3个字段,并且您正在通过uid进行过滤,因此您可以只使用MAX而不使用JOIN:
但是,如果表中有更多的字段,或者您没有通过
uid
进行过滤-您需要首先获取每个版本的MAX日期时间,然后选择行:3npbholx2#
z5btuh9x3#
对我来说有一个更好的方法,你可以添加一个
desc
到group by:SELECT * FROM table WHERE uuid ='bla 'GROUP BY版本说明
为什么它的作品是因为我的id的产生,所以总是最新的id意味着最新的日期时间
kcwpcxri4#
我在php上使用了一个单独的方法来获取id并将其放入数组中。然后在另一个SQL查询中,我通过查找ID来搜索数据
然后呢