2017-11-18 1 views
0

Ich habe eine Tabelle: box (ID autoincrement, net_amount, created_at timestamp); Ich muss eine Abfrage in PHP mysql erstellen, um den letzten eingefügten Datensatz jeden Monat auszuwählen. Also um den net_amount am Ende eines jeden Monats zu bekommen. mir diese einfache Abfrage versucht:php - mysql Wählen Sie den zuletzt eingefügten Datensatz zwischen zwei Daten (jeden Monat)

select * from box 
where box.created_at < 20055332516028 

Während der max created_at in meinem Tisch 2017.10.14 10.42.30 ist, gibt es keine Aufzeichnungen, wenn ich die angegebene Abfrage verwenden, ich erhöhen müssen Nummer, um die Aufzeichnungen zu bekommen !!!

+0

so müssen Sie Datensatz erhalten, die zuletzt während Monaten eingeführt werden zwei Daten richtig? – Rits

+0

Ich muss den letzten eingefügten Datensatz in jedem Monat bekommen. Letzter Rekord zwischen Beginn und Ende eines jeden Monats. –

+0

so geben Sie den Wert von Anfang und Ende an? Ich bin zwischen Werten, oder? – Rits

Antwort

0

20055332516028 kein Zeitstempel Unix ist. Sie müssen Zeitstempel des Ende des Vormonats zu bekommen, so etwas wie dieses:

$date = new DateTime(); 
$date->setDate($date->format('Y'),$date->format('m'),1); 
$date->setTime(0,0,0); 
$date->sub(new DateInterval('PT1S')); 
$endOfMonth = $date->getTimestamp(); 

und es dann in einer Abfrage verwenden:

select * from box where box.created_at < unix_timestamp(?) order by box.created_at desc limit 1 
+0

Vielen Dank. Ich denke, du bist richtig, aber ich muss noch ein Startdatum angeben, Bin ich richtig? –

+0

Ich verwende eine Schleife mit $ i inkrementiert werden. und das folgende verwenden, um das Anfangs- und das Enddatum in Zeitstempeln zu erstellen: $ startDate = date ("Y-m-d", strtotime ("2016-01-1")); $ endDate = Datum ("Y-m-d", strtotime ("2016-01-1 +". $ I. "Monat")); $ fromTimeStamp = Datum ('d-m-Y', strtotime ($ fromDate)); $ fromTimeStamp = strtotime ($ fromTimeStamp); $ toTimeStamp = Datum ('d-m-Y', strtotime ($ toDate)); $ toTimeStamp = strtotime ($ toTimeStamp); pls wie Sie das Datum in Ihrer Lösung angeben? –

+0

Es hängt wirklich davon ab, was in Ihrem Tisch ist und welche Informationen Sie erhalten möchten. Wenn "der letzte Datensatz zum angegebenen Monat eingefügt wurde", dann ist es im Grunde "alle Datensätze nach dem umgekehrten Datum sortieren, diejenigen herausfiltern, die nach dem Ende des angegebenen Monats sind und den ersten Datensatz nehmen" und es ist, wofür meine vorgeschlagene Abfrage ist. – Flying

0

wenn ich Ihr Problem Ihr Verständnis für diese Suche: -

SELECT b1.* 
FROM box b1 LEFT JOIN box b2 
ON (b1.name = b2.name AND b1.id < b2.id) 
WHERE b1.created_at < PUT YOUR DATE and b2.id IS NULL; 

Hoffe, es hilft

Verwandte Themen