Reputation: 2917
So two questions really:
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A** AND
DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = **B**)
Upvotes: 0
Views: 671
Reputation: 86706
Hopefully your currency_rate
table has a unique identifier column.
If it does, you can merge queries A and B into a single query in the WHERE clause...
SELECT
CurrencyRateID, Rate, Markup
FROM
currency_rate
WHERE
uniqueID = (
SELECT uniqueID
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
ORDER BY DateTime DESC LIMIT 1
)
If not, you may just have to repeat yourself...
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
AND DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1))
Note: Even though the code repeats itself, it's likely that MySQL will notice the repeition and only perform the query once.
EDIT:
I just noticed that you could simplify the first option to just use the sub-query...
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
ORDER BY DateTime DESC LIMIT 1
Upvotes: 1
Reputation: 8239
Check if currencyID column exists in currency table and change query this way, so you can use statement A in where clause.
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate cr inner join
(SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A**
ON cr.CurrencyID = a.CurrencyID
WHERE cr.DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = A.CurrencyID)
Upvotes: 1