Autor | Zpráva | ||
---|---|---|---|
jtfcobra Profil |
Mám záznamy
1.1.2017 7:00 xxx hodnota 1.1.2017 8:00 xxx hodnota 1.1.2017 9:00 xxx hodnota 1.1.2017 10:00 xxx hodnota 1.1.2017 20:00 xxx hodnota 1.1.2017 23:00 xxx hodnota 2.1.2017 7:00 xxx hodnota 2.1.2017 8:00 xxx hodnota 2.1.2017 9:00 xxx hodnota 2.1.2017 10:00 xxx hodnota 2.1.2017 20:00 xxx hodnota 2.1.2017 23:00 xxx hodnota atd..... premyslim jak to promazat aby tam byl jen prvni zaznam dne a posledni zaznam dne Takto: 1.1.2017 7:00 xxx hodnota 1.1.2017 23:00 xxx hodnota 2.1.2017 7:00 xxx hodnota 2.1.2017 23:00 xxx hodnota Poradíte? |
||
Taps Profil |
#2 · Zasláno: 30. 9. 2017, 09:57:47
jtfcobra:
používáš v databázi datetime? pokud ano, tak by to mohlojít jednoduše pomocí podmínky where |
||
Keeehi Profil |
#3 · Zasláno: 30. 9. 2017, 13:17:05
Navíc pokud je zaručeno, že první záznam je v 7 hodin a žádný jiný záznam v 7 hodiny není a poslední je ve 23 a žádný jiný ve 23 taky není (stejně jako v ukázce) tak by to mělo jít velmi jednoduše.
Jaká je tedy struktura tabulky? |
||
jtfcobra Profil |
DROP TABLE IF EXISTS `cem`.`spotreba`; CREATE TABLE `cem`.`spotreba` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `seriovecislo` text, `datum` datetime DEFAULT NULL, `hodiny` text, `idmeraku` text, `merak` text, `byt` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1332621 DEFAULT CHARSET=utf8; |
||
Keeehi Profil |
#5 · Zasláno: 30. 9. 2017, 19:15:35
No a co ta omezení co jsem popsal, ta platí? A nebo ukázka nereflektuje skutečnost? Protože pokud neplatí, tak pak se nedá použít ten jednoduchý způsob.
|
||
Taps Profil |
#6 · Zasláno: 30. 9. 2017, 22:35:03
jtfcobra:
proč jsou hodiny jako text? |
||
Kajman Profil |
#7 · Zasláno: 1. 10. 2017, 19:07:43
Osobně bych to asi ani nemazal. Nemělo by to moc zabírat a pokud jsou v některých sloupcích, kde máte datový typ text, samé číselné hodnoty, změnte datový typ sloupce. A udělejte indexy pro dotazy, které trvají dlouho.
Pokud trváte na mazání, tak bych použil delete ... using syntaxi. Napadají mě dvě varianty, ale nevím, co bude rychlejší (bez přidaných indexů nebude jistě rychlé ani jedno a dotaz možná server díky tomu nezvládne dokončit). a) tabulku zkusím propojit vnějším spojením s podotazem na té samé tabulce hledající maximální hodnoty času v každý den a pro každý měřák (nebo byt, to záleží na Vás, co chcete vlastně mazat). Propojení udělejte i poddotaz hledající minimální hodnoty. Do obou spojení zahrňte i čas a smažte ty, řádky, které nebyly nalezeny v maximálním ani minimálním poddotaze. b) tabulku zkusim propojit vnitřním spojením s tou samou tabulkou s podmínkou, že je stejné datum, měřák a čas je větší. Druhé spojení, že je stejné datum, měřák a čas je menší. Mazejte však jen z prvního aliasu. |
||
jtfcobra Profil |
#8 · Zasláno: 1. 10. 2017, 19:32:34
Takle:
DROP TABLE IF EXISTS `cem1melnik`.`spotreba`; CREATE TABLE `cem1melnik`.`spotreba` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `seriovecislo` text, `datum` datetime DEFAULT NULL, `hodiny` int(10) unsigned DEFAULT NULL, `idmeraku` text, `merak` text, `byt` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1354548 DEFAULT CHARSET=utf8; ? mas priklad a) nebo b) jako kod ? |
||
Kajman Profil |
#9 · Zasláno: 1. 10. 2017, 19:56:50
Pokud uděláte drop tabulky, tak už nebude co mazat. Zkuste ještě popsat sloupce - co tam bývá za hodnoty a jaký mají v tabulce logický smysl.
|
||
jtfcobra Profil |
#10 · Zasláno: 2. 10. 2017, 00:16:40
Co tohleto ?
To procisti stejne zaznamy ale nevim jak udelat aby tam zbyli jen zaznamy co maji zmeny v hodinach napr 1.1 , 1.2 atd.... DELETE tabulka1 FROM cem1melnik.spotreba tabulka1 JOIN cem1melnik.spotreba tabulka2 ON tabulka2.hodiny = tabulka1.hodiny WHERE tabulka1.id > tabulka2.id |
||
Kajman Profil |
#11 · Zasláno: 2. 10. 2017, 09:19:11
Toto by mělo zachovat pro každou kombinaci datumu a hodin nejvyšší a nejnižší hodnotu ze sloupce datum.
Minimálně pro mazání bych si udělal index nad sloupci (hodiny,datum), možná bych si i dočasně přidal pomocný sloupec, kde bude jen datum bez času. Pak bych udělal index nad třemi sloupci (hodiny,pomocnysloupec,datum) a místo podmínek Date(datum) bych použil ten pomocný sloupec. Mazání nejprve řádně otestujte na kopii dat. DELETE kesmazani FROM cem1melnik.kopiespotreba kesmazani JOIN cem1melnik.kopiespotreba nejakemensi ON kesmazani.hodiny = nejakemensi.hodiny AND Date(kesmazani.datum) = Date(nejakemensi.datum) AND kesmazani.datum > nejakemensi.datum JOIN cem1melnik.kopiespotreba nejakevetsi ON kesmazani.hodiny = nejakevetsi.hodiny AND Date(kesmazani.datum) = Date(nejakevetsi.datum) AND kesmazani.datum < nejakevetsi.datum |
||
Časová prodleva: 5 let
|
0