Vybrat nejbližší předchozí a v daném časovém úseku – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vybrat nejbližší předchozí a v daném časovém úseku – MySQL – Fórum – Programujte.comVybrat nejbližší předchozí a v daném časovém úseku – MySQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
19. 5. 2014   #1
-
0
-

potřebuji z tabulky vybrat záznamy tak, aby první byl nejbližší v čase před zadaným časovým úsekem a následovaly záznamy, které jsou v zadaném časovém úseku. Zatím jsem je dával do dočasné tabulky tb pomocí dvou select:

insert tb select cas, udalost, popis from leva_udalosti where udalost = 'nazev'
 and cas < '2014-05-15 14:18:00' order by cas desc limit 1;
insert tb select cas, udalost, popis from leva_udalosti where udalost = 'nazev'
 and cas between '2014-05-15 14:18:00' and '2014-05-19 14:30:00' order by cas;

Nedaří se mi přijít na to, jak toho dosáhnout v jednom select :(

hu

Nahlásit jako SPAM
IP: 195.178.67.–
P
~ Anonymní uživatel
212 příspěvků
19. 5. 2014   #2
-
0
-

Nevim co (ne)dokaze MySQL. Pro MS SQL by to mohlo byt takto: 

SELECT cas, udalost, popis
FROM (
	SELECT TOP 1 cas, udalost, popis
	FROM leva_udalosti
	WHERE udalost = 'nazev' AND cas < '2014-05-15 14:18:00'
	ORDER BY cas DESC
) q
UNION
SELECT cas, udalost, popis
FROM leva_udalosti
WHERE udalost = 'nazev'	AND cas BETWEEN '2014-05-15 14:18:00' AND '2014-05-19 14:30:00'

nebo takto: 

SELECT u.cas, u.udalost, u.popis
FROM leva_udalosti u
INNER JOIN (
	SELECT u.udalost, u.cas, MIN(d.cas) AS dalsi_cas
	FROM leva_udalosti u
	LEFT OUTER JOIN leva_udalosti d ON d.udalost = u.udalost AND d.cas > u.cas
	GROUP BY u.udalost, u.cas
) d ON d.udalost = u.udalost AND d.cas = u.cas
WHERE u.udalost = 'nazev'
AND d.dalsi_cas > '2014-05-15 14:18:00'
AND u.cas <= '2014-05-19 14:30:00'

(syntaxe je pro MS SQL, pripadne si uprav pro MySQL)

Nahlásit jako SPAM
IP: 85.93.116.–
20. 5. 2014   #3
-
0
-

Nestandartní standart SQL. TOP MySQL nezná. První řešení jsem pochopil jako union těch select, co jsem dělal: 

select cas, udalost, popis from (
select cas, udalost, popis from leva_udalosti where udalost = 'nazev'
 and cas < '2014-05-15 14:18:00' order by cas desc limit 1) q
union
select cas, udalost, popis from leva_udalosti where udalost = 'nazev'
 and cas between '2014-05-15 14:18:00' and '2014-05-19 14:30:00' order by cas;

druhé řešení funguje bez jakékoliv úpravy. Asi použiji to první, zdá se mi srozumitelnější.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
6. 6. 2014   #4
-
0
-

Studoval jsem http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_least kvůli řešení jiného problému a napadlo mne ještě jiné řešení zde popisovaného problému. Pro úplnost: 

set @z = '2014-04-11 11:20:30';
set @k = '2014-04-11 11:23:40';
set @u = 'pozn';
set @o = 'poznamka';

select greatest(@z, zacatek) as zac, if(isnull(konec), @k, least(konec, @k)) as kon
  from nazvy_a_pozn where udalost = @u and obsah = @o
  and ( (zacatek < @z and ( konec > @z or konec is null ))
  or zacatek between @z and @k );

Proměnné není nutné používat, ale snáze se to při "vývoji query" píše.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý