2016-10-25 4 views
0

ich kombinieren, haben derzeit eine Tabelle (post) mit den folgenden Spalten:Wie viele Einzelergebnis Abfragen in einer einzigen Abfrage mit mehreren Ergebnissen

id, stock_code, posted_at

Für einen Aktiencode gegeben SC und die Zeit T1, ich kann die neueste Post nach einer gewissen Zeit mit etwas abrufen wie

SELECT * FROM post WHERE stock_code = SC AND time > T1 ORDER BY time asc LIMIT 1; (nicht wirklich getestet, aber Sie erhalten den Kern)

Allerdings möchte ich einen Satz von mehreren Aktien dieses Ergebnis erhalten (oder sogar für jeden eindeutigen Lagercode in der Tabelle). Ich kann einfach diese Abfrage mehrmals ausgeführt, aber das schnell ineffizient wird, und es wäre am besten in eine SQL-Abfrage zu kombinieren, aber ich kann meinen Kopf nicht umschlingen, wie das zu tun. Ich würde jede Zeile wie die neueste Post nach einer bestimmten Zeit für einen bestimmten Vorrat zu sein, und für jede Aktie eine Zeile habe. Wie gehe ich dabei vor?

P.S. Verwenden von Postgres 9.4.8 und SqlAlchemy auf der Python-Seite. Wäre glücklich mit nur SQL, aber wenn es einige sqlalchemy Magie ist auf das gleiche Ergebnis zu erhalten, das wäre genial.

Antwort

1

Verwendung distinct on:

SELECT DISTINCT ON (stock_code) p.* 
FROM post p 
WHERE p.stock_code = 'SC' AND p.time > T1 
ORDER BY p.stock_code, time asc; 

Offensichtlich mit der WHERE Klausel, wird diese eine Zeile zurückgeben. Sie können die p.stock_code = 'SC' entfernen und eine Zeile pro stock_code bekommen.

+0

perfekt, das war eine viel einfachere Lösung als ich in Betracht gezogen. Vielen Dank für die Hilfe – Lobe

0

Verwenden union oder union all gruppieren Ergebnisse von Mai Abfragen in einem.

Verwandte Themen