给出以下表格格式......
id | date | value
___|____________|______
11 | 2010-01-01 | 50
11 | 2010-01-02 | 100
12 | 2010-01-01 | 150
12 | 2010-01-02 | 200
...我需要选择与我指定的日期最大id
对应的value
。到目前为止,我弄清楚如何执行此操作的唯一方法是使用子查询,如下所示:
SELECT id
FROM table
WHERE date = '2010-01-01'
AND value = (
SELECT MAX(value)
FROM table
WHERE date = '2010-01-01'
GROUP BY date
)
在一个包含约70,000条记录的表上,主键超过id
和date
,这需要大约0.25秒才能执行,这对我来说似乎很长一段时间。我有更快的方法来获得相同的结果吗?
感谢。
答案 0 :(得分:3)
SELECT TOP 1 id FROM table WHERE date = '2010-01-01' ORDER BY value DESC
答案 1 :(得分:1)
MySQL对从GROUP BY
查询中获得的内容变得非常宽容 - 这意味着它不必只是聚合或GROUP BY
列。你应该没问题PRIMARY KEY
看看下面给你的内容。
SELECT id, MAX(value) FROM table WHERE date = '2010-01-01' GROUP BY date;
答案 2 :(得分:1)
尝试使用JOIN?
SELECT
A.id
FROM
table A
JOIN (SELECT MAX(value) as m_value
FROM table
WHERE date = '2010-01-01') AS B ON A.value = B.m_value
WHERE
A.date = '2010-01-01'
答案 3 :(得分:1)
SELECT id
FROM table
WHERE (date,value) IN ( select date, max(value)
from table
where date = '2010-01-01'
group by date
)
SELECT id
FROM table
WHERE date = '2010-01-01'
AND value = ( select max(value)
from table
where date = '2010-01-01'
)
FROM
语句中执行连接的任何查询都等同于WHERE
子句中的子查询。 LIMIT/TOP 1
的任何查询都可能无法返回完整的结果集,这会根据您的要求对您的应用程序产生负面影响 - 您可能需要所有ID