У меня следующая ситуация. У меня есть база данных транзакций о нескольких контрактах. Я ищу первую транзакцию, где alpha < alphaBound и контракт имеет будущее, то есть есть записи после даты того же ID контракта. Для этого я делал:
select transactionID,
date,
alpha,
contractID
from myDB
where date >= '2000-01-01'
and alpha < alphaBound
а затем повторяя результаты следующим образом:
for(i in 1:length(resultSet) ) {
date.tmp = resultSet[i, date]
contractID.tmp = resultSet[i, contractID]
future = doQuery("select * from myDB where date > " + date.tmp + " AND contractID = " + contractID.tmp)
if(future is not empty) {
# break! Found the entry I wanted
}
}
Как я могу сделать это в 1 запросе? Спасибо.
Использование:
SELECT t.transactionid,
t.date,
t.alpha,
t.contractid
FROM mydb t
WHERE t.date >= '2000-01-01'
AND t.alpha < alphaBound
AND EXISTS(SELECT NULL
FROM mydb x
WHERE x.contractid = t.contractid
AND x.date > t.date)