Ich habe einen Datensatz von Wertpapierpreisen in einer Datenbank. Die Daten werden wie folgt strukturiert:SQL-Match-Zeilen basierend auf 2 Kriterien
id security_id time_to_maturity price
001 01 1.5 100.45
002 01 1.3 101.45
003 01 1.1 102.45
004 01 1.02 101.45
005 01 1.0 101.45
006 03 22.3 94.45
007 03 22.1 96.45
008 03 21.8 98.45
009 05 4.2 111.45
010 05 4.1 112.45
011 05 3.8 111.45
...
id die row_id
und security_id
ist die ID jeder Sicherheit. Ich versuche nur Daten aus einem bestimmten Zeitbereich für jedes Wertpapier zu bekommen. Zuerst habe ich eine Abfrage ausführen, die min und max für jedes Wertpapier-ID zu finden, finden dann die Differenz zwischen dem minimalen und maximalen und schließlich einen Wert finden, wie diese 10% mehr als das Minimum ist:
SELECT security_id, MIN(time_to_maturity), MAX(time_to_maturity),
MAX(time_to_maturity) - MIN(time_to_maturity) tDiff,
((MAX(time_to_maturity) - MIN(time_to_maturity)) * .1) + MIN(time_to_maturity)
FROM db1
group by security_id
order by security_id
Dies gibt mich wie folgt zusammen:
security_id min() max() diff min+(diff*.1)
01 1.0 1.5 .5 1.05
03 21.8 22.3 .5 21.85
05 3.8 4.2 .4 3.84
Schließlich, was ich wählen tun möchte ist von den wichtigsten Datensatz nur die Zeilen für jede security_id
wo die time_to_maturity is < min+(diff*.1)
.
Ich bin mir nicht sicher, wie es zu strukturieren, da ich glaube, ich brauche eine Schleife, um Daten von security_id, dann von time_to_maturity is < min+(diff*.1)
.
Die Antwort würde wie folgt aussehen:
id security_id time_to_maturity price
004 01 1.02 101.45
005 01 1.0 101.45
008 03 21.8 98.45
011 05 3.8 111.45
Irgendwelche Vorschläge?
Ist Ihre Frage zu MySQL oder über SQL Server? Sie sind nicht das Gleiche. –