2009-06-30 7 views
0

IWie einen Datensatz vor dem Startdatum und Enddatum bekommen

DtpFrom means – 'date picker from 
DtpTo means – 'date picker to 

VB 6 CODE

sdate = DateToString(dtpFrom) 
edate = DateToString(dtpTo) 

QUERY

Where DATE BETWEEN '" & sdate & "' AND '" & edate & "'" 
einen Datensatz vor dem Startdatum und Enddatum erhalten möchte

Ich möchte einen Datensatz vor sdate und edate erhalten

habe ich versucht, diesen Code

VB 6 CODE

s1sdate = -sdate 
e1edate= -edate 

QUERY

Where DATE BETWEEN '" & s1date & "' AND '" & e1date & "'" 

Aber es eines Tages minus

Beispiel

Selecting 03/05/2009 to 03/06/2009 from date picker, but it showing record from 
02/05/2009 to 02/06/2009. 

Ich will geht auf d Stellen Sie einen Datensatz vor dem Auswahldatum und Enddatum auf, nicht einen Tag vorher, da meine Tabelle kein Enddatum ist.

weiteres Beispiel:

Wenn wir einen Tisch und Zeilen haben [ID (int), Wert (Geld)] und wir haben einige Zeilen darin

ID --Value 
1------70 
2------100 
3------150 
8------200 
20-----250 
45-----280 

und wollen wir Frage stellen, dass erhalten jede Zeile ID, Wert und den vorherigen Zeilenwert in dem Datum erscheint als

ID --- Value ---Prev_Value 
1 ----- 70 ---------- 0 
2 ----- 100 -------- 70 
3 ----- 150 -------- 100 
8 ----- 200 -------- 150 
20 ---- 250 -------- 200 
45 ---- 280 -------- 250 

i die folgende Abfrage machen folgen, aber ich denke, es in großer Menge an Daten in der Leistung so schlecht

select t1.id, t1.value, t2.value from table t1 inner join table t2 on t1.id = t2.id where t2.value = (select max(value) from table t where t.value< t1.value and t.id = t1.id) and T1.value BETWEEN '" & sdate & "' AND '" & edate & "' 

Benötigen Sie VB 6 CODE ODER ACCESS QUERY HILFE.

+0

Bitte Kann jemand helfen? – Gopal

+0

http://StackOverflow.com/Questions/742226 und http://StackOverflow.com/Questions/1067672 – colithium

+0

@Colithium - I Put zusätzliche Beispiel nur nicht eine genaue Daten, was ich brauche – Gopal

Antwort

0
SELECT * FROM whatever 
WHERE DATE < sdate 
ORDER BY DATE DESC 
LIMIT 1 

Ich glaube nicht, Enddatum wirklich wichtig ist, wenn Sie „den einen vor den Aufzeichnungen zwischen Start- und Enddatum“ wollen

Aber wenn Sie den Datensatz möchten sich vor dem Startdatum und der Datensatz unmittelbar vor Enddatum Sie könnten einfach die obige Abfrage mit edate anstelle von sdate wiederholen.

Dies ist, was die Abfrage tatsächlich bedeutet: Wählen Sie jeden Datensatz mit einem Datum vor diesem (sdate). Ordnen Sie alle diese Datensätze absteigend nach DATE (DESC) an. Gib nur die erste zurück (LIMIT 1).

Hinweis: Einige Implementierungen variieren. Möglicherweise müssen Sie "TOP 1" nach dem Wort "SELECT" anstelle von "LIMIT 1" verwenden.

+0

Am Wählen Sie das Datum zwischen 20090101 bis 20090601 und Ich habe Ihre Abfrage verwendet, aber sie zeigt den Datensatz vor 20090101.Weil du Gopal

+0

Ich bin mir nicht sicher, was das bedeutet, kannst du Beispiele von Daten erklären und geben und was willst du zurückgeben? (Bearbeiten Sie Ihre Frage) – colithium

+0

@Colithium - bearbeitet meine Frage, ein anderes Beispiel zur Verfügung gestellt – Gopal

Verwandte Themen