Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 24. 6. 2022, 12:11:26
Zdravim,
vyberam z tabulky zaznamy o case vyroby. mam tam 3 rozne zaznamy 1Riadok | Polozka | Verzia | Popis | Hodiny Riadok | Polozka | Verzia | Popis | Hodiny
1 | TR18403 | 1 | stroj 1 | 1,233
2 | TR18403 | 1 | stroj 2 | 1,111
3 | TR18403 | 2 | stroj 1 | 1,111 Potrebujem vybrat vsetky polozky where polozka = 'TR18403' AND 'kde je Verzia navyssie cislo z daneho stroja' Malo by to vybrat riadok 2 a 3, pretoze stroj 1 ma najvyssiu verziu 2 a to je riadok 3, a stroj 2 ma jedinu a to najvyssiu 1 Ako docielit toho aby to tak vybralo? Alebo nejako updatovat celu tabulku v DB, kde by som si priradil k takym zaznamom dalsi column Aktivny s priznakom ano/nie napriklad? Dakujem |
||
Kajman Profil |
Něco jako
1SELECT z.* SELECT z.*
FROM zaznamy z
JOIN (SELECT polozka,
popis,
Max(verzia) max_verzia
FROM zaznamy zg
WHERE zg.polozka = 'TR18403'
GROUP BY zg.polozka, zg.popis
) zm
ON z.polozka = zm.polozka
AND z.popis = zm.popis
AND z.verzia = zm.max_verzia |
||
Andrej.B Profil |
#3 · Zasláno: 24. 6. 2022, 13:33:58
Kajman:
funguje ako ma. Ja som medzitym urobil nieco, co tiez funguje, ale niesom si isty, ci to nemoze spravit nejaky specificky problem neskor pri nejakom produkte. Zatial som si dal testovacej verzie vas aj moj a uvidim, ci sa pri testovani nieco neobjavi. 1SELECT * SELECT *
FROM zaznamy
WHERE polozka = 'TR18403'
AND verzia IN
(
Select max(verzia)
from zaznamy
WHERE polozka = 'TR18403'
) Je este najaka moznost upravit Vas ci moj na update celej tabulky pre otazku 2? Andrej.B: „Alebo nejako updatovat celu tabulku v DB, kde by som si priradil k takym zaznamom dalsi column Aktivny s priznakom ano/nie napriklad?“ Dakujem |
||
anonym_ Profil * |
#4 · Zasláno: 24. 6. 2022, 15:36:00
Andrej.B:
Ten tvůj dotaz přeci vrátí jen jeden záznam, ne? Nikde tam nepracujes s jednlitvymi stroji. |
||
Keeehi Profil |
#5 · Zasláno: 24. 6. 2022, 15:45:19
anonym:
Stejný problém má i ten dotaz od Kajman. Ale je to lehce řešitelné, stačí na konec toho subselectu přidat GROUP BY polozka, popis
Andrej.B: Při jedné položce fungují dotazy stejně. Ten od Kajman je však lehce rozšiřitelný na více položek. Stačí dát WHERE zg.polozka IN ('TR18403', 'PU12765') , nebo tu podmínku celou odstranit. V takovém případě to najde ty poslední verze pro veškeré položky a stroje.
|
||
Kajman Profil |
#6 · Zasláno: 24. 6. 2022, 16:21:14
Doplnil jsem chybějící group by do poddotazu.
Update bude asi podobný, zkuste ho na testovacích datech 1UPDATE zaznamy z UPDATE zaznamy z
JOIN (SELECT polozka,
popis,
Max(verzia) max_verzia
FROM zaznamy zg
/* WHERE zg.polozka = 'TR18403' */
GROUP BY zg.polozka, zg.popis
) zm
ON z.polozka = zm.polozka
AND z.popis = zm.popis
SET z.aktivni = (z.verzia = zm.max_verzia) |
||
Časová prodleva: 3 dny
|
|||
Andrej.B Profil |
#7 · Zasláno: 27. 6. 2022, 08:24:14
anonym:
dotaz vracia vsetky stroje, ktore maju podmienku Where = Polozka a navyssie cislo. Ukazuje ako ma. Kajman: done. Perfekt. Teraz mi staci pouzit jednoduchsi select na kontrolu, ktory cas je platny ku ktoremu stroju a polozke. Dakujem vsetkym |
||
Kajman Profil |
#8 · Zasláno: 27. 6. 2022, 08:59:41
Andrej.B:
„Ukazuje ako ma“ Kdepak. Nehledáte max pro každý stroj, proto to nebude fungovat dobře. Pokud tedy jako v příkladu nemají všechny stroje stejnou maxímální verzi, nebudou všechny vypsány. Nad daty z [#1] to tedy vypíše jen stroj 1 ale ne stroj 2. |
||
Andrej.B Profil |
#9 · Zasláno: 27. 6. 2022, 12:48:41
Kajman:
„Kdepak. Nehledáte max pro každý stroj, proto to nebude fungovat dobře. Pokud tedy jako v příkladu nemají všechny stroje stejnou maxímální verzi, nebudou všechny vypsány. Nad daty z [#1] to tedy vypíše jen stroj 1 ale ne stroj 2.“ Zdravim, tak toto je dost mimo mna uz. DATA: 1riadok polozka verzia popis hodiny riadok polozka verzia popis hodiny
1 TR18021/090/07 1 23002 - TEVAP 0,001714
2 TR18021/090/07 1 23002 - TEVAP 0,001714
3 TR18021/090/07 1 23007 - MASTR 0,0025
4 TR18021/090/07 1 23010 - SWAH 2 0,002055
5 TR18021/090/07 1 23007 - MASTR 0,0025
6 TR18021/090/07 2 23002 - TEVAP 0,001714
7 TR18021/090/07 2 23007 - MASTR 0,002242
8 TR18021/090/07 2 23010 - SWAH 2 0,001463
9 TR18021/090/07 3 23002 - TEVAP 0,001714
10 TR18021/090/07 3 23007 - MASTR 0,00203
11 TR18021/090/07 3 23010 - SWAH 2 0,001463
12 TR18021/090/07 3 23011 - SWAH 3 0,001694 Pokial zadam tento kod do Adminera, ci normalne v mojom kode cez While, kde si vypisujem stroje, tak vsetko funguje a vyhodi mi to, co ma. 4 riadky. 1SELECT * SELECT *
FROM zaznamy
WHERE polozka = 'TR18021/090/07'
AND verzia IN
(
Select max(verzia)
from zaznamy
WHERE polozka = 'TR18021/090/07'
) Hodil som to vsetko teda do SQL fiddle, ze vam ukazem ako presne to mam u seba a tam uz je ten riadok len jeden. sqlfiddle.com/#!9/13a0ac/2 Je to nejakym nastavenim servera, ci ako? Inak ten vas z [#2] Kajman funguje ako vidno na Fiddle - sqlfiddle.com/#!9/13a0ac/1 |
||
anonym_ Profil * |
#10 · Zasláno: 27. 6. 2022, 14:03:08
Andrej.B:
Tobě to najde 4 záznamy, protože tam je čtyřikrát verze (čehokoliv) 3. Kajmanovi to najde také 4 záznamy, ale jiné, než tobě (ty správné). |
||
Kajman Profil |
#11 · Zasláno: 27. 6. 2022, 14:35:55
|
||
Andrej.B Profil |
#12 · Zasláno: 27. 6. 2022, 15:05:15
Dakujem vsetkym. Uz mi to doslo.
|
||
Časová prodleva: 3 roky
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0