Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中的按顺序排序_Mysql_Sql - Fatal编程技术网

mysql中的按顺序排序

mysql中的按顺序排序,mysql,sql,Mysql,Sql,我使用mysql作为数据库,我有一个如下表 CREATE TABLE IF NOT EXISTS `logins` ( `id` int(255) NOT NULL AUTO_INCREMENT, `userid` varchar(255) NOT NULL, `date` varchar(255) NOT NULL, `status` varchar(255) NOT NULL, KEY `id` (`id`) ) ENGINE=In

我使用mysql作为数据库,我有一个如下表

CREATE TABLE IF NOT EXISTS `logins` (  
    `id` int(255) NOT NULL AUTO_INCREMENT,  
    `userid` varchar(255) NOT NULL,  
    `date` varchar(255) NOT NULL,  
    `status` varchar(255) NOT NULL,  
    KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=346 ;
我想用order by对mysql结果进行排序。问题是当我使用这个sql时,它只需要第一次记录日期。这是一个更老的约会。我想要最新的约会。用户的最后登录日期

SELECT * FROM `logins` WHERE `status`='valid' GROUP BY `userid` ORDER BY `date` DESC

有什么建议吗?

要做到这一点,您可以使用子查询来获取每个用户id的最新记录,然后将其连接到logins表以获取其余的详细信息

SELECT logins.*
FROM logins
INNER JOIN
(
    SELECT userid, MAX(`date`) AS max_date
    FROM `logins`
    WHERE `status` = 'valid' 
    GROUP BY `userid` 
) sub0
ON logins.userid = sub0.userid
AND logins.`date` = sub0.max_date
WHERE `status` = 'valid'

你差点就成功了。假设id和userId不会从一个登录演变为另一个登录,询问MAX date应该会得到预期的结果

SELECT id, userId, MAX(`date`) AS lastDate, 'valid'
FROM `logins`
WHERE `status`='valid'
GROUP BY `userid`
ORDER BY `lastDate` DESC

请注意,如果表中的登录名之间存在更改的数据,则需要加入。

您的选择中有GROUP BY,但没有聚合。如上所述,在没有任何聚合功能的情况下,使用GROUP BY是不合适的。如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做(而且还没有),请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供与步骤1中提供的信息相对应的所需结果集。翻译:删除“GROUP BY userid”下一点,它开始的日期未定义。它可能会选择只给你第一次约会,也可能会选择最后一次。无法保证所有其他字段也会与为日期选择的字段位于同一行(尽管它们可能位于同一行)。看起来您希望
ORDER BY date DESC LIMIT 1
并删除
GROUP BY