Problem: Mysql Select abfrage GROUP BY?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
-
Moin zusammen,
ich habe folgende Problem:
Ich habe eine Datenbank, wo in zwischen über 20000 Datensätze drin sind und jeden Tag kommen so 50-60 neue dazu.
Die Tabelle hat 34 Spalten:
id, City, ……. , Tempertaur, Datum Zeit (list_dt_txt), updated
19995, Oldenburg, ……. , 10.0 , 2020-01-12 15:00:00 , 2020-01-11 14:05:17
19996, Oldenburg, ……. , 4.3 , 2020-01-12 15:00:00 , 2020-01-12 13:00:16
19997, Oldenburg, ……. , 9.9 , 2020-01-14 06:00:00 , 2020-01-12 13:00:16
19998, Oldenburg, ……. , 10.1 , 2020-01-12 15:00:00 , 2020-01-12 14:00:16
19999, Oldenburg, ……. , 7.4 , 2020-01-13 10:00:00 , 2020-01-12 14:00:16
Die id ist aufsteigend und AUTO, updated ist Auto Timestamp on Update
Die Daten können doppelt vorhanden sein, einig ist id und updated immer anders.
Jetzt möchte ich die Daten für den Tag 12.11.2020 auflesen, die am aktuellsten sind.
Sprich die id 19998.
SELECT id,`list_dt_txt`,`list_main_temp`,`updated` FROM wetter_owm_forecast WHERE updated >= '2020-01-12%' GROUP BY list_dt_txt HAVING updated >= '2020-01-11%' ORDER BY `list_dt_txt` ASC, `updated` DESC
Mit der Abfrage bekomme ich zwar die Werte angezeigt, jedoch GROUP BY nimmt das erste vorkommen in der Datenbank und nicht das Letzte. Somit sind die Daten nicht aktuell sondern auf einen früheren Stand.
Wie kann ich den Select umschreiben, dass er immer die aktuellen Daten zieht?
Ich hoffe ich habe mich verständlich ausgedrückt. :)
Ich habe noch mal die Datenbank mit Beispiel Daten hier hinterlegt.
Die Formatierung lassen wir mal außen vor. :)
CREATE TABLE `wetter_owm_forecast` ( `id` int(40) NOT NULL, `cod` varchar(40) CHARACTER SET latin1 NOT NULL, `message` varchar(40) CHARACTER SET latin1 NOT NULL, `city_id` varchar(40) CHARACTER SET latin1 NOT NULL, `city_name` varchar(40) CHARACTER SET latin1 NOT NULL, `city_coord_lon` varchar(40) CHARACTER SET latin1 NOT NULL, `city_coord_lat` varchar(40) CHARACTER SET latin1 NOT NULL, `city_country` varchar(40) CHARACTER SET latin1 NOT NULL, `city_country_population` varchar(40) CHARACTER SET latin1 NOT NULL, `city_sys_population` varchar(40) CHARACTER SET latin1 NOT NULL, `cnt` varchar(40) CHARACTER SET latin1 NOT NULL, `list_dt` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_temp` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_temp_min` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_temp_max` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_pressure` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_sea_level` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_grnd_level` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_humidity` varchar(40) CHARACTER SET latin1 NOT NULL, `list_main_temp_kf` varchar(40) CHARACTER SET latin1 NOT NULL, `list_weather_id` varchar(40) CHARACTER SET latin1 NOT NULL, `list_weather_main` varchar(40) CHARACTER SET latin1 NOT NULL, `list_weather_description` varchar(40) CHARACTER SET latin1 NOT NULL, `list_weather_icon` varchar(40) CHARACTER SET latin1 NOT NULL, `list_clouds_all` varchar(40) CHARACTER SET latin1 NOT NULL, `list_wind_speed` varchar(40) CHARACTER SET latin1 NOT NULL, `list_wind_deg` varchar(40) CHARACTER SET latin1 NOT NULL, `list_wind_gust` varchar(40) CHARACTER SET latin1 NOT NULL, `list_rain_3h` varchar(40) CHARACTER SET latin1 NOT NULL, `list_snow_3h` varchar(40) CHARACTER SET latin1 NOT NULL, `list_sys_pod` varchar(40) CHARACTER SET latin1 NOT NULL, `list_dt_txt` varchar(40) CHARACTER SET latin1 NOT NULL, `timestamp` int(40) NOT NULL, `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Daten für Tabelle `wetter_owm_forecast` -- INSERT INTO `wetter_owm_forecast` (`id`, `cod`, `message`, `city_id`, `city_name`, `city_coord_lon`, `city_coord_lat`, `city_country`, `city_country_population`, `city_sys_population`, `cnt`, `list_dt`, `list_main_temp`, `list_main_temp_min`, `list_main_temp_max`, `list_main_pressure`, `list_main_sea_level`, `list_main_grnd_level`, `list_main_humidity`, `list_main_temp_kf`, `list_weather_id`, `list_weather_main`, `list_weather_description`, `list_weather_icon`, `list_clouds_all`, `list_wind_speed`, `list_wind_deg`, `list_wind_gust`, `list_rain_3h`, `list_snow_3h`, `list_sys_pod`, `list_dt_txt`, `timestamp`, `updated`) VALUES (20981, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579068000', '10.12', '10.12', '10.12', '1003', '1003', '1002', '76', '0', '500', 'Rain', 'Leichter Regen', '10n', '100', '10.65', '212', '', '0.19', '', 'n', '2020-01-15 06:00:00', 1578833102, '2020-01-12 12:45:02'), (20982, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579078800', '9.45', '9.45', '9.45', '1004', '1004', '1003', '80', '0', '500', 'Rain', 'Leichter Regen', '10d', '100', '9.6', '210', '', '0.63', '', 'd', '2020-01-15 09:00:00', 1578833102, '2020-01-12 12:45:02'), (20983, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579089600', '9.17', '9.17', '9.17', '1005', '1005', '1004', '81', '0', '500', 'Rain', 'Leichter Regen', '10d', '100', '9.44', '212', '', '0.81', '', 'd', '2020-01-15 12:00:00', 1578833102, '2020-01-12 12:45:02'), (20984, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579100400', '8.91', '8.91', '8.91', '1007', '1007', '1005', '84', '0', '500', 'Rain', 'Leichter Regen', '10d', '100', '9.02', '221', '', '1.13', '', 'd', '2020-01-15 15:00:00', 1578833102, '2020-01-12 12:45:02'), (20985, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579111200', '7.53', '7.53', '7.53', '1010', '1010', '1008', '88', '0', '500', 'Rain', 'Leichter Regen', '10n', '100', '3.62', '257', '', '0.81', '', 'n', '2020-01-15 18:00:00', 1578833102, '2020-01-12 12:45:02'), (20986, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579122000', '5.87', '5.87', '5.87', '1013', '1013', '1012', '83', '0', '804', 'Clouds', 'Bedeckt', '04n', '87', '4.97', '231', '', '', '', 'n', '2020-01-15 21:00:00', 1578833102, '2020-01-12 12:45:02'), (20987, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579132800', '4.82', '4.82', '4.82', '1016', '1016', '1014', '88', '0', '802', 'Clouds', 'Mäßig bewölkt', '03n', '43', '5.02', '215', '', '', '', 'n', '2020-01-16 00:00:00', 1578833102, '2020-01-12 12:45:02'), (20988, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579143600', '4.36', '4.36', '4.36', '1018', '1018', '1016', '91', '0', '800', 'Clear', 'Klarer Himmel', '01n', '0', '5', '217', '', '', '', 'n', '2020-01-16 03:00:00', 1578833102, '2020-01-12 12:45:02'), (20989, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579154400', '3.81', '3.81', '3.81', '1019', '1019', '1017', '93', '0', '802', 'Clouds', 'Mäßig bewölkt', '03n', '42', '4.65', '206', '', '', '', 'n', '2020-01-16 06:00:00', 1578833102, '2020-01-12 12:45:02'), (20990, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579165200', '4.62', '4.62', '4.62', '1020', '1020', '1018', '88', '0', '802', 'Clouds', 'Mäßig bewölkt', '03d', '47', '5.01', '203', '', '', '', 'd', '2020-01-16 09:00:00', 1578833102, '2020-01-12 12:45:02'), (20991, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579176000', '7.6', '7.6', '7.6', '1019', '1019', '1018', '76', '0', '803', 'Clouds', 'Überwiegend bewölkt', '04d', '73', '4.49', '188', '', '', '', 'd', '2020-01-16 12:00:00', 1578833102, '2020-01-12 12:45:02'), (20992, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579186800', '6.51', '6.51', '6.51', '1018', '1018', '1016', '81', '0', '804', 'Clouds', 'Bedeckt', '04d', '100', '3.83', '151', '', '', '', 'd', '2020-01-16 15:00:00', 1578833102, '2020-01-12 12:45:02'), (20993, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579197600', '5.45', '5.45', '5.45', '1016', '1016', '1015', '90', '0', '804', 'Clouds', 'Bedeckt', '04n', '89', '4.59', '144', '', '', '', 'n', '2020-01-16 18:00:00', 1578833102, '2020-01-12 12:45:02'), (20994, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579208400', '6.82', '6.82', '6.82', '1015', '1015', '1013', '87', '0', '804', 'Clouds', 'Bedeckt', '04n', '99', '6.5', '155', '', '', '', 'n', '2020-01-16 21:00:00', 1578833102, '2020-01-12 12:45:02'), (20995, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579219200', '7.73', '7.73', '7.73', '1012', '1012', '1010', '79', '0', '804', 'Clouds', 'Bedeckt', '04n', '99', '7.42', '168', '', '', '', 'n', '2020-01-17 00:00:00', 1578833102, '2020-01-12 12:45:02'), (20996, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579230000', '8.92', '8.92', '8.92', '1010', '1010', '1008', '76', '0', '804', 'Clouds', 'Bedeckt', '04n', '100', '6.86', '181', '', '', '', 'n', '2020-01-17 03:00:00', 1578833102, '2020-01-12 12:45:02'), (20997, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579240800', '8.62', '8.62', '8.62', '1010', '1010', '1008', '88', '0', '500', 'Rain', 'Leichter Regen', '10n', '100', '6.56', '196', '', '1.13', '', 'n', '2020-01-17 06:00:00', 1578833102, '2020-01-12 12:45:02'), (20998, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579251600', '9.13', '9.13', '9.13', '1011', '1011', '1009', '91', '0', '500', 'Rain', 'Leichter Regen', '10d', '100', '6.05', '208', '', '0.38', '', 'd', '2020-01-17 09:00:00', 1578833102, '2020-01-12 12:45:02'), (20999, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1579262400', '10.28', '10.28', '10.28', '1012', '1012', '1010', '80', '0', '500', 'Rain', 'Leichter Regen', '10d', '100', '5.86', '233', '', '0.25', '', 'd', '2020-01-17 12:00:00', 1578833102, '2020-01-12 12:45:02'), (21000, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1578841200', '8.24', '7.66', '8.24', '1014', '1014', '1012', '84', '0.58', '500', 'Rain', 'Leichter Regen', '10d', '100', '9.98', '231', '', '0.25', '', 'd', '2020-01-12 15:00:00', 1578834012, '2020-01-12 13:00:12'), (21001, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1578852000', '8.99', '8.56', '8.99', '1016', '1016', '1014', '84', '0.43', '500', 'Rain', 'Leichter Regen', '10n', '100', '7.98', '244', '', '0.38', '', 'n', '2020-01-12 18:00:00', 1578834012, '2020-01-12 13:00:12'), (21002, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1578862800', '7.36', '7.07', '7.36', '1017', '1017', '1015', '88', '0.29', '500', 'Rain', 'Leichter Regen', '10n', '91', '6.04', '256', '', '0.19', '', 'n', '2020-01-12 21:00:00', 1578834012, '2020-01-12 13:00:12'), (21003, '200', '0', '2857458', 'Oldenburg', '8.2', '53.1667', 'DE', 'D', '', '40', '1578873600', '6.8', '6.65', '6.8', '1019', '1019', '1017', '90', '0.15', '500', 'Rain', 'Leichter Regen', '10n', '90', '5.05', '250', '', '0.12', '', 'n', '2020-01-13 00:00:00', 1578834902, '2020-01-12 13:15:02'); -- -- Indizes der exportierten Tabellen -- -- -- Indizes für die Tabelle `wetter_owm_forecast` -- ALTER TABLE `wetter_owm_forecast` ADD PRIMARY KEY (`id`), ADD KEY `id` (`id`); -- -- AUTO_INCREMENT für exportierte Tabellen -- -- -- AUTO_INCREMENT für Tabelle `wetter_owm_forecast` -- ALTER TABLE `wetter_owm_forecast` MODIFY `id` int(40) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21004; COMMIT;
Gruß
Daniel -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wieso willst du denn mit GROUP BY arbeiten?
Du könntest auch einfach einen SELECT machen mit nem WHERE für den aktuellen Tag, nach dem Datum absteigend sortieren und ein LIMIT 1 rein hauen.
Damit hast du den aktuellsten Datensatz von Tag X. -
Moin moin.
Okay, dann hab ich mich nicht verständlich ausgedrückt.
In der Datenbank sind von heute an bis 5 Tage danach in Stunden Werten Datensätze drin. Diese werden mal aktualisiert mal nicht.
Ich möchte immer die aktuellen Daten haben.
Da diese durcheinander gewürfelt sind, kann ich hier nicht mit einer "einfachen" Sortierung arbeiten.
Gruß
Daniel
-
Hi,
mein Lösungsansatz wäre eine Sub-query, wie in folgendem Thread erläutert:
https://stackoverflow.com/questions/17327043/how-can-i-select-rows-with-most-recent-timestamp-for-each-key-value
der Rest ist einfache Anwendung von Logik -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage