我有这样的表:table exchaneRate
╔════╦══════════╦══════════════╦═════╦══════╦══════════════════╗
║ id ║ officeID ║ currencyCode ║ buy ║ sell ║ startDateTime ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 01 ║ off_1 ║ AA ║ 65 ║ 75 ║ 2015═10═01 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 02 ║ off_1 ║ BB ║ 64 ║ 73 ║ 2015═10═01 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 03 ║ off_1 ║ AA ║ 55 ║ 65 ║ 2015═09═25 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 04 ║ off_1 ║ BB ║ 54 ║ 63 ║ 2015═09═25 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 05 ║ off_1 ║ AA ║ 30 ║ 42 ║ 2015═09═15 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 06 ║ off_1 ║ BB ║ 40 ║ 48 ║ 2015═09═15 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 07 ║ off_2 ║ AA ║ 65 ║ 75 ║ 2015═10═01 12:00 ║
╠════╬══════════╬══════════════╬═════╬══════╬══════════════════╣
║ 08 ║ off_2 ║ BB ║ 65 ║ 75 ║ 2015═10═01 12:00 ║
╚════╩══════════╩══════════════╩═════╩══════╩══════════════════╝
我有这样的要求来选择数据:
select `currencyCode`, `buy`, `sell` from `exchangeRate`
where `officeID` = 'off_1' and startDateTime <= '2015-09-30 00:00';
我想要这个结果:
╔══════════════╦═════╦══════╗
║ currencyCode ║ buy ║ sell ║
╠══════════════╬═════╬══════╣
║ AA ║ 55 ║ 65 ║
╠══════════════╬═════╬══════╣
║ BB ║ 54 ║ 63 ║
╚══════════════╩═════╩══════╝
但是请求从表返回所有记录AA,BB,AA,BB,AA,BB...。但是我currencyCode
为此只需要最后一个记录officeID
。我怎样才能做到这一点?
我将采用以下方法。内部查询currencyCode
使用您的时间范围确定每个记录所需的记录。exchangeRate
然后,通过对该内部查询过滤原始表,INNER JOIN
以提供所需的输出。
SELECT t1.currencyCode, t1.buy, t1.sell
FROM exchangeRate t1 INNER JOIN
(
SELECT currencyCode, MAX(startDateTime) AS maxTime
FROM exchangeRate
WHERE startDateTime <= '2015-09-30 00:00' AND officeID = 'off_1'
GROUP BY currencyCode
) t2
ON t1.currencyCode = t2.currencyCode AND t1.startDateTime = t2.maxTime
单击下面的正在运行的演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句