这是我当前的查询:
SELECT * FROM (
SELECT * FROM feesbydate
LEFT JOIN (
SELECT MAX(from_date) as the_date FROM (
SELECT a.* FROM feesbydate a, feesbydate b
WHERE a.exchFee_ID = 15 AND b.exchFee_ID = 15
AND a.from_date <= b.from_date
AND a.id <> b.id AND b.id = 62
GROUP BY a.id
) a) b on from_date < the_date
WHERE exchFee_ID = 15) c
WHERE not(isnull(the_date));
基本上我有一个包含以下列的表:
id | exch_feeID | from_date | to_date |其他不相关的专栏
我希望获得from_date
之前之前某个id
(在上面的示例中为62
)且具有某个{的所有记录{1}}(在上面的示例中为exchFee_ID
)。
上面的查询有效。但随着我的桌子的增长,这可能不是最理想的。是否有更高性能或更有效的方法来做到这一点?
答案 0 :(得分:3)
只需做一个简单的加入:
SELECT *
FROM feesbydate AS f,
( SELECT from_date
FROM feesbydate
WHERE id = 62
AND exchFee_ID = 15 ) AS g
WHERE f.exchFee_ID = 15
AND f.from_date < g.from_date
只要您能保证每条记录的值都存储在from_date
下,这就足够了。
答案 1 :(得分:-2)
只要你的密钥和索引是理智的,这很好。 SQL是 这样的复杂性。不要害怕使用它。
但如果您怀疑性能问题,请先对它们进行基准测试,然后再进行优化。