Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Mysql db dotaz

Ahoj, potřeboval bych pomoct s mysql dotazem...

Mám tabulku, kde mám (int)FID, (int)UID, (int)WEEK, (int)YEAR,...,

a potřebuji zjistit jedním dotazem minimální týden/rok a maximální týden/rok where FID= and UID =

Tedy když mám např. v tabulce tato data:

1;1;10;2016
1;1;15;2016
1;1;3;2017
1;1;5;2017
1;2;3;2016
1;2;15;2016
1;2;17;2017

a jako parametry FID = 1, UID = 1, tak potřebuji výsledek:

MIN_WEEK->10
MIN_YEAR->2016
MAX_WEEK->5
MAX_YEAR->2017

Problém je, že nevím, jak to udělat jedním dotazem. Díky moc!

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
No zatím jsem vyplodil toto: SELECT WEEK(MIN(x.datum)) AS MIN_WEEK, WEEK(MAX(x.datum)) AS MAX_WEEK,… nový
n.u.r.v. 04.10.2016 14:45
n.u.r.v.
Pokud je to tvoje aplikace, pak to bude mnohem rozumnejsi nový
Jan Fiala 04.10.2016 14:54
Jan Fiala
Já ji jen dostal na stůl po bývalém vývojáři a teď se přidávají nové fce :-( nový
n.u.r.v. 04.10.2016 15:02
n.u.r.v.
s trochou predstavivosti sa to da aj jednym selectom :) Opakujuci kod mozes nahradit scalarnou funkc… nový
wam_Spider007 04.10.2016 16:32
wam_Spider007
Děkuji všem za pomoc, nakonec jsem si dal tu práci překopat app a v db ukládám vždy DATE - z toho zí… poslední
n.u.r.v. 05.10.2016 10:32
n.u.r.v.

No zatím jsem vyplodil toto:

SELECT WEEK(MIN(x.datum)) AS MIN_WEEK, WEEK(MAX(x.datum)) AS MAX_WEEK, YEAR(MIN(x.datum)) AS MIN_YEAR, YEAR(MAX(x.datum)) AS MAX_YEAR
FROM (
SELECT STR_TO_DATE(CONCAT(YEAR,'',LPAD(WEEK,2,'00'),' Monday'), '%X%V %W') AS datum
FROM data
WHERE FID =1 AND UID =1
) AS x;

Ale asi to nebude z hlediska výkonu nic moc, takže asi projdu aplikaci a pokud to nebude na překopání celé app, tak to upravím na klasický DATE a při insertu budu převádět WEEK/YEAR (a MONTH/YEAR) na DATE

s trochou predstavivosti sa to da aj jednym selectom :)
Opakujuci kod mozes nahradit scalarnou funkciou :)

select
LEFT(MAX(CONCAT([YEAR], REPLICATE('0', 2 - LEN([WEEK]) ), [WEEK])), 4) MAX_YEAR,
CAST(RIGHT(MAX(CONCAT([YEAR], REPLICATE('0', 2 - LEN([WEEK]) ), [WEEK])), 2) AS INT) MAX_WEEK,
LEFT(MIN(CONCAT([YEAR], REPLICATE('0', 2 - LEN([WEEK]) ), [WEEK])), 4) MIN_YEAR,
CAST(RIGHT(MIN(CONCAT([YEAR], REPLICATE('0', 2 - LEN([WEEK]) ), [WEEK])), 2) AS INT) MIN_WEEK
from data where FID = 1 AND [UID] = 1

Zpět do poradny Odpovědět na původní otázku Nahoru