2016-11-29 3 views
1

Ich habe eine Tabelle, die _id, underSubheadId, wefDate, Preis enthalten. Wenn ein Produkt erstellt oder ein Preis bearbeitet wird, wird auch in dieser Tabelle ein Eintrag gemacht. Was ich will, ist, wenn ich ein Datum eingeben, ich den neuesten Preis aller verschiedenen UnderSubheadIds vor dem Zeitpunkt erhalten (oder zu diesem Zeitpunkt, wenn kein Eintrag gefunden)Erhalten Sie den neuesten Preis SQLITE

_id underHeadId wefDate price 
1  1  2016-11-01 5 
2  2  2016-11-01 50 
3  1  2016-11-25 500 
4  3  2016-11-01 20 
5  4  2016-11-11 30 
6  5  2016-11-01 40 
7  3  2016-11-20 25 
8  5  2016-11-15 52 

Wenn ich eingeben 2016.11.20 als Datum ich sollte

bekommen
1 5 
2 50 
3 25 
4 30 
5 52 

ich das Ergebnis mit ROW NUMBER-Funktion in SQL Server erreicht haben, aber ich möchte dieses Ergebnis in SQLite, die keine solche Funktion. Auch wenn ein Datum wie 2016-10-25 (die keine Einträge haben) eingegeben wird, möchte ich den Preis des Datums, das zuerst ist. Wie für 1 erhalten wir Preis als 5 als nächste und der 1. Eintrag ist 2016-11-01.

Dies ist die Abfrage für SQL Server, die gut funktioniert. Aber ich möchte es für Sqlite, die nicht ROW_NUMBER-Funktion haben.

select underSubHeadId,price from(
    select underSubHeadId,price, ROW_NUMBER() OVER (Partition By underSubHeadId order by wefDate desc) rn from rates 
    where wefDate<='2016-11-19') newTable 
where newTable.rn=1 

Danke

Antwort

1

Dies ist ein wenig schwierig, aber hier ist ein Weg:

select t.* 
from t 
where t.wefDate = (select max(t2.wefDate) 
        from t t2 
        where t2.underSubHeadId = t.underSubHeadId and 
         t2.wefdate <= '2016-11-20' 
       ); 
+0

Ich habe gerade diese Abfrage ausgeführt, aber ich bekomme das gleiche Ergebnis wie Select * von t. Alle Zeilen werden zurückgegeben. :(@Gordon Linoff Werfen Sie einen Blick auf http://imgur.com/a/OeMhF –

+0

@RishiChandak. Sind Sie sicher, dass die Korrelationsklausel korrekt ist? –

+0

Ich bin mir nicht sicher. Aber die Abfrage, die Sie vorgeschlagen, gab alle Zeilen zurück Der Bildlink ist im letzten Kommentar enthalten Vielen Dank schon –

0

wählen underHeadId, max (Preis) von t wo wefDate < = „2016- 11-20 " Gruppe von underHead;

+0

Ich dont wan t der Höchstpreis des Datums, aber für den letzten Preiseintrag von diesem Datum. –

+0

Ich bezweifle, wenn Sie sql verstehen. –

+0

Weißt du, das habe ich an dir gespürt, als ich deine Anfrage gesehen habe. Dude diese Abfrage wird den maximalen Preis der UnderHeadId vor diesem Datum zurückgeben. Aber das ist nicht der Wert, den ich will, was ich will, ist der letzte aktualisierte Wert dieses UnderHeads vor diesem Datum. –

Verwandte Themen