mysql - 为每个用户选择最新的两行以获得列的差异(MySQL)

标签 mysql

我的 mysql 查询有问题。我有一个表,其中包含 ID(自动增量)、用户 ID、值和时间(以秒为单位)。现在我想获得每个用户的两个最低值的差异,但不知道该怎么做:(

我有下表:

id   |  uid  | myvalue |  thetime
-----+-------+---------+-----------
13   |   1   |   120   | 1389287800
14   |   2   |   100   | 1389287810
15   |   3   |   110   | 1389287820
16   |   2   |    80   | 1389287830
17   |   4   |   100   | 1389287840
18   |   1   |   110   | 1389287850
19   |   3   |   105   | 1389287860
20   |   1   |   100   | 1389287870

我想要得到以下结果:

uid  | difference      --> Order by difference
-----+------------
 2   |     20
 1   |     10
 3   |      5

如果有人愿意帮助我,那就太好了。非常感谢!!

最佳答案

您必须对此进行改进,但这基本上就是您的做法。您可以使用自加入

SELECT uid, MAX(myvalue)-MIN(myvalue) AS diff FROM
    (SELECT a.* FROM tablename AS a
        LEFT JOIN tablename AS a2
            ON a.uid=a2.uid AND a.myvalue<=a2.myvalue
        GROUP BY uid,myvalue
        HAVING COUNT(*)<=2
    ) a
GROUP BY uid

关于mysql - 为每个用户选择最新的两行以获得列的差异(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21257396/

相关文章:

php - 如何引用我刚刚插入到 MySQL 表中的行?

sql 语句检索给定记录的结果列表(从其他表)?

php - 如何在wordpress中插入注册表值?

mysql - 将 RDBMS 与 Apache Directory Ldap 同步

python - 在Connection.execute sqlalchemy中运行UPDATE SET参数化sql语句

MySQL Group_Concat 重复值

MySql、选择、左连接、分组依据、限制..以及我必须在哪里下订单?

mysql - 'IN' 的使用不正确?

sql - 在 MySQL 中插入默认值作为当前日期 + 30 天

python - 如何在pymysql中使用多个变量