Al momento ho queste tabelle:SQL Partecipa alla data più vicina a disposizione
CREATE TABLE #SECURITY_TEMP (ID CHAR(30))
CREATE TABLE #SECURITY_TEMP_PRICE_HISTORY (ID CHAR(30), PRICEDATE DATE, PRICE FLOAT)
CREATE TABLE #SECURITY_POST (ID CHAR(30), SECPOS int)
INSERT INTO #SECURITY_TEMP (ID) VALUES ('APPL') ,('VOD'),('VOW3'), ('AAA')
INSERT INTO #SECURITY_TEMP_PRICE_HISTORY (ID,PRICEDATE, PRICE) VALUES
('APPL', '20150101',10.4), ('APPL', '20150116',15.4), ('APPL', '20150124',22.4),
('VOD', '20150101', 30.5), ('VOD', '20150116',16.5), ('VOD', '20150124',16.5),
('VOW3', '20150101', 45.5), ('VOW3', '20150116',48.8) ,('VOW3', '20150124',50.55),
('AAA', '20100118', 0.002)
INSERT INTO #SECURITY_POST (ID,SECPOS) VALUES ('APPL', 100), ('VOD', 350), ('VOW3', 400)
voglio avere un tavolo pulito che mi mostra l'ID di sicurezza, la posizione di sicurezza e l'ultimo prezzo disponibile per la sicurezza, quando una data è passato.
Ora, quando faccio la seguente:
SELECT sec.ID, sec.SECPOS, t.PRICE
FROM #SECURITY_POST as SEC INNER JOIN #SECURITY_TEMP_PRICE_HISTORY as t
ON sec.ID = t.ID
WHERE t.PriceDate = '20150101'
GROUP BY sec.ID, secPos, t.price
ottengo il risultato corretto
1. ID SECPOS PRICE
2. APPL 100 10.4
3. VOD 350 30.5
4. VOW3 400 45.5
Tuttavia, ci possono essere circostanze in cui i singoli, il prezzo di un titolo non è disponibile. In questo senso, voglio quindi essere in grado di ottenere il prezzo più recente disponibile.
Facendo
SELECT sec.ID, sec.SECPOS, t.PRICE
FROM #SECURITY_POST as SEC INNER JOIN
#SECURITY_TEMP_PRICE_HISTORY as t
ON sec.ID = t.ID
WHERE t.PriceDate = '20150117'
GROUP BY sec.ID, secPos, t.price
Restituisce 0 file a causa della non ci sono dati, e facendo
SELECT sec.ID, sec.SECPOS, t.PRICE
FROM #SECURITY_POST as SEC INNER JOIN
#SECURITY_TEMP_PRICE_HISTORY as t
ON sec.ID = t.ID
WHERE t.PriceDate <= '20150117'
GROUP BY sec.ID, sec.secPos, t.price
HAVING sec.secpos <> 0
Restituisce le righe duplicate.
Ho provato un sacco di diverse metodologie e non riesco proprio a ottenere l'output desiderato. Inoltre, vorrei anche essere in grado di ottenere una colonna con il prezzo più vicino a una data (chiamatelo START_DATE
) e una colonna con il prezzo più vicino a una seconda data (chiamatelo END_DATE
) e una colonna che sarà la posizione [email protected]_DATE - [email protected]_DATE
. Il prezzo è sempre preso dallo stesso #SECURITY_TEMP_PRICE_HISTORY
.
Tuttavia, la mia conoscenza di SQL è semplicemente imbarazzante e non sono riuscito a trovare un modo efficace per farlo. Qualsiasi aiuto sarebbe apprezzato. Si noti inoltre che la tabella #SECURITY_PRICE_HISTORY table may contain more securities than the #SECURITY_POST
.
Grazie a tutti per aver pulito il mio post! – buellboy