MySQL 获取先前 WHERE 条件的 MAX

标签 mysql subquery aggregate

我有一张 table :

  id | score | date
 bob |    40 | 2010-1-1
 bob |    70 | 2010-1-15
 sue |    55 | 2010-1-1
 sue |    80 | 2010-2-1

我想查询某个用户在特定日期的分数,或者如果该用户在该日期不存在分数,则返回该用户最近日期的分数。

有没有办法在没有子查询的情况下做到这一点?

例如,如果我这样做:

SELECT score
FROM table
WHERE id = '$id'
AND IFNULL(
    date = DATE(FROM_UNIXTIME($date)),
    MAX(date)   
    )

我不会得到任何结果,因为最近的日期没有显示 ID。

更新

Felix 提醒我不能在 WHERE 子句中使用聚合函数,所以现在我想知道是否有一个伪聚合日期函数用于在 where 子句中表示“最近日期”,如果有,如果我可以在使用该功能时指定用户吗?

更新2

这就是我要做的工作,但我仍然不知道这是否是最好的方法(即,我需要嵌套查询吗?):

SELECT score
FROM table
WHERE id = '$id'
AND date = IFNULL(
    (SELECT date FROM table
    WHERE id = '$id' AND
    date = DATE(FROM_UNIXTIME($date))
    ),
    (SELECT MAX(date) FROM table
    WHERE id = '$id'
    )
)

最佳答案

不确定这个的性能:

SELECT a.*
FROM table a
LEFT JOIN table b ON (
  b.date=DATE(FROM_UNIXTIME($date)) AND b.date=a.date AND b.id=a.id
)
WHERE a.id='$id'
ORDER BY b.date DESC, a.date DESC
LIMIT 1

关于MySQL 获取先前 WHERE 条件的 MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2377697/

相关文章:

用于嵌套数组元素的 mongodb $group

mysql - 将数据从配置单元中获取到 mysql @ AWS 中?

Postgresql 子查询

mysql - 在子查询中使用查询中的逗号分隔字符串

postgresql - 是否缓存了 PostgreSQL 子查询/CTE?

python - 如何使用 pandas 聚合具有空值的 bool 字段?

python - pandas groupby 聚合具有多列的自定义函数

mysql - SQL查询以检索最接近时间戳的记录

mysql - 我怎么能.... SELECT *, lcase(name) AS name FROM table

MySQL - 根据一个或两个第一个字符匹配邮政编码