2016-10-04 3 views
1

Ich versuche, erste Transaktionen auf neue Karten zurückzugeben. Umsonst. Ich versuche, eine Abfrage zu schreiben, die Kartennummern zurückgibt, die Transaktionen an einem bestimmten Datum zum ersten Mal ausgeführt haben. Dies ist meine Abfrage, aber es gibt mir Kartennummern, die Transaktionen früher an früheren Daten durchgeführt haben.Sybase SQL Return Erste mal Transaktionen

SELECT TOP 1 trans_date, card_num 
FROM e_transaction 
where trans_date between '20161004 00:00' and '20161004 23:59' 
+1

Können Sie Beispieldaten und erwartetes Ergebnis hinzufügen. 'Top' ohne' Order By' macht keinen Sinn –

+1

TOP 1, aber keine ORDER BY? – jarlh

+0

Aktualisieren Sie Ihre Frage und zeigen Sie uns Beispieldaten zusammen mit der gewünschten Ausgabe. –

Antwort

1

das früheste Transaktionsdatums für eine Karte mit dem ersten Transaktionsdatum übereinstimmt Unter der Annahme, können Sie versuchen, die folgende GROUP BY Abfrage:

SELECT MIN(trans_date), card_num 
FROM e_transaction 
GROUP BY card_num 
HAVING MIN(trans_date) BETWEEN '20161004 00:00' AND '20161004 23:59' 

TRANS_DATE .... Card_Num .... Trans_Amount;

10/2/2016 ..... 21345 ............... 500;

10/2/2016 ..... 21345 ................ 600;

10/4/2016 ..... 21114 ............... 300;

10/4/2016 ..... 21734 ............... 600;

9/4/2016 ...... 21734 ................ 400

Angenommen, dies war der Tisch, meine Abfrage zurückgeben sollte card_num =‘ 21114 'und Trans_Amount =' 300 'ist, dass auf dieser Kartennummer kein vorheriger Transaktionsverlauf vorhanden ist. Andere Kartennummern werden nicht zurückgegeben, da sie frühere Transaktionshistorie oder das Auftreten früherer Daten enthalten.