Autor | Zpráva | ||
---|---|---|---|
Gogo_v Profil * |
#1 · Zasláno: 18. 10. 2011, 18:34:08
Dobrý den. Potřeboval bych pomoci se selectem z databaze. Mám dva sloupce time_od a time_do. v tabulce jsou uložené jako TIME.
Výsledek by měl být počet hodin v rozsahu 7-19 a 19-7 zatim jsem vypotil [vygooglil] neco takovéhoto. funguje to relativně dle očekávání problem ale je když čas začíná např. v 18:30 a končí v 20:30 výsledek se mi vrátí v rozsahu 7 - 19 což je ale špatně :( stejný problém pochopitelně když začíná v 6:00 a končí v 8:00 zase to vrátí v rozsdahu 19-7 "select sec_to_time(sum(time_to_sec(timediff(time_do, time_od)))) from pohotovost_vyjezd where prubehid=$id AND HOUR(time_od) BETWEEN 7 AND 19 group by id with rollup;" "select sec_to_time(sum(time_to_sec(timediff(time_do, time_od)))) from pohotovost_vyjezd where prubehid=$id AND HOUR(time_od) NOT BETWEEN 7 AND 19 group by id with rollup;" Diky moc za pomoc. |
||
Tori Profil |
#2 · Zasláno: 18. 10. 2011, 19:45:16
Šlo by to určitě udělat podmínkou, ale asi to bude pomalé.
TIMEDIFF( IF(time_do > '19:00', '19:00:00', time_do), IF(time_od < '07:00', '07:00:00', time_od)) |
||
Gogo_v Profil * |
#3 · Zasláno: 18. 10. 2011, 20:12:35
Tori:
o rychlost moc nejde jedná se o pár záznamu řekněme 50 za měsíc ta podminka ale asi neřesí co potřebuju. Jedná se mi o to že mám v tabulce uložené dny a k nim dvě pole plnění úkolu od-do a potřebuju počet hodin každý den v těch dvou kategoriich tj kolik hodin se plnili nějaké úkoly jedna se mi vyloženě o sumu např. 23,5 hodin od 7-19 a 10 hodin od 19-7 konkrétní den. Nevím jestli jsem to napsal srozumitelně :) +----+----------+----------+----------+-----------------------------+ | id | prubehid | time_od | time_do | ukol | +----+----------+----------+----------+-----------------------------+ | 1 | 16 | 10:00:00 | 11:00:00 | Delal jsem neco nevim co :) | | 2 | 16 | 12:00:00 | 13:00:00 | dalsi vyjezd | | 7 | 7 | 22:00:00 | 23:20:00 | pokus 123 | | 4 | 42 | 10:00:00 | 12:00:00 | nevim co | | 6 | 16 | 18:20:00 | 19:20:00 | pres 19 hodinu | +----+----------+----------+----------+-----------------------------+ |
||
Tori Profil |
#4 · Zasláno: 18. 10. 2011, 20:42:14 · Upravil/a: Tori
Gogo_v:
U intervalu 18:00-20:00 počítáte hodinu do denní směny a hodinu do noční, chápu správně? Ve [#2] jsem vycházela z tohoto předpokladu (patří to místo toho timediff(time_od, time_do), aby se u přesahujících intervalů nepočítala ta část v jiné směně). Zkoušela jsem počítat ty noční časy, ale nejde to jen obrácením porovnávání, omlouvám se za nedomyšlenou radu. |
||
Gogo_v Profil * |
#5 · Zasláno: 18. 10. 2011, 20:49:41
Tori:
Tak uplně nedomyšlené to neni jde to udělat ale musel bych ten select pustit třikrat a výsledek pak sečíst ... určitě to jde jednodušeji jen nevim jak select sec_to_time(sum(time_to_sec(TIMEDIFF( IF(time_do < '19:00', '19:00:00', time_do), IF(time_od < '19:00', '19:00:00', time_od))))) from pohotovost_vyjezd where prubehid=16 AND HOUR(time_od) BETWEEN 7 AND 19 group by id with rollup; |
||
Kajman_ Profil * |
#6 · Zasláno: 18. 10. 2011, 22:01:20
select id, -- sum(time_to_sec(timediff(time_do,time_od)))/3600 vse, sum(time_to_sec(timediff(least(time_do,'19:00'),greatest(time_od,'07:00'))))/3600 den, sum(time_to_sec(timediff(greatest(time_do,'19:00'),greatest(time_od,'19:00'))))/3600 + sum(time_to_sec(timediff(least(time_do,'07:00'),least(time_od,'07:00'))))/3600 noc from pohotovost_vyjezd v where prubehid=16 group by id with rollup |
||
Gogo_v Profil * |
#7 · Zasláno: 18. 10. 2011, 22:22:54
Kajman,
To nevypada zle ovšem ma to jednu mouchu +----+--------+---------+--------+ | id | vse | den | noc | +----+--------+---------+--------+ | 1 | 1.0000 | 1.0000 | 0.0000 | | 2 | 1.0000 | 1.0000 | 0.0000 | | 6 | 1.0000 | 0.6667 | 0.3333 | | 8 | 2.3333 | -2.0000 | 2.3333 | | NULL | 5.3333 | 0.6667 | 2.6667 | +----+--------+---------+--------+ tabulka na kterou jsem zkoušel ten select +----+----------+----------+----------+-----------------------------+ | id | prubehid | time_od | time_do | vyjezd | +----+----------+----------+----------+-----------------------------+ | 1 | 16 | 10:00:00 | 11:00:00 | Delal jsem neco nevim co :) | | 2 | 16 | 12:00:00 | 13:00:00 | dalsi vyjezd | | 6 | 16 | 18:20:00 | 19:20:00 | pres 19 hodinu | | 8 | 16 | 21:00:00 | 23:20:00 | nocni | +----+----------+----------+----------+-----------------------------+ |
||
Kajman_ Profil * |
tak zkuste, tuhle to
sum(time_to_sec(timediff(least(greatest(time_do,'07:00'),'19:00'),least(greatest(time_od,'07:00'),'19:00'))))/3600 den, |
||
Gogo_v Profil * |
#9 · Zasláno: 19. 10. 2011, 07:57:46
Kajman:
Ano, s timto to funguje perfektně díky moc za pomoc. |
||
Časová prodleva: 13 let
|
0