Diskuze: Dotaz databáze
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Přidáš jen na konec dotazu
ORDER BY s.Datum DESC
LIMIT 1
Nevím co myslíš tím nejvyšším datumem, s limitem ti to vrátí pouze jednu s tím nejvyšším datumem, bez něj seřazené od nejnovější po nejstarší.
Jedná se o sklad, kde každá změna u položky skladu se ukládá jako nový záznam. Po načtení databáze do gridu potřebuji zobrazit všechny položky skladu s nejvyšším datem. Asi bude problém s tím, že mi to načte jen tu položku, kde je nejvyšší datum. V podstatě potřebuji u každé položky načíst tu s poslední změnou.
Dej mi příklad, asi nechápu, co jsou všechny položky s nejvyšším
datem 
Ve skladu jsou např. Cihla, Cement, Vápno.
23.6.2012 Cihla cena 5,-
23.6.2012 Vápno cena 140,-
23.6.2012 Cement cena 135,-
24.6.2013 Cihla cena 5,50
25.7.2014 Vápno cena 155,-
26.9.2014 Cement cena 145,-
Potřebuji načíst
24.6.2013 Cihla cena 5,50
25.7.2014 Vápno cena 155,-
26.9.2014 Cement cena 145,-
Prostě poslední změny u všech položek
SELECT id, name, price, max(date)
FROM `devbook_obchod`
GROUP BY name
Doplň si tam ten join a je to hotové 
Na vyzkoušení jsem si udělal dvě tabulky, napsal jsem to takto:
string connectionString = @"Data Source=MyDatabase.sdf";
using (SqlCeConnection spojeni = new SqlCeConnection(connectionString))
{
spojeni.Open();
string dotaz = "SELECT a.Id, a.Clovek, a.BarvaId, MAX(a.Datum), b.Id, b.Barva FROM Lidi a LEFT JOIN Barvy b ON a.BarvaId = b.Id GROUP BY a.Id ";
using (SqlCeDataAdapter adapter = new SqlCeDataAdapter(dotaz, spojeni))
using (DataSet vysledky = new DataSet())
{
adapter.Fill(vysledky);
foreach (DataRow radek in vysledky.Tables[0].Rows)
{
dataGridView1.Rows.Add(radek["Id"], radek["BarvaId"], radek["Clovek"], radek["Barva"], radek["datum"] );
}
}
spojeni.Close();
}
ale vyhazuje mi to chybu: In aggregate and grouping expressions, the SELECT clause can contain only aggregates and grouping expressions. [ Select clause = a,Clovek ]
Dělám to jako CE databázi
Nikdy jsem v CE nedělal, tady už bohužel neporadím.
Když používáš agregační funkce (sum, max, avg, ...) tak musíš dát všechny ostatní sloupce do klauzule group by.
Možná se mi to podařilo složitě, alu funguje mi to. Mám to takto:
string connectionString = @"Data Source=MyDatabase.sdf";
using (SqlCeConnection spojeni = new SqlCeConnection(connectionString))
{
spojeni.Open();
string dotaz = "SELECT l.Id, l.BarvaId, l.Clovek, l.Datum, b.Id, b.Barva FROM Lidi l LEFT JOIN Barvy b ON l.BarvaId = b.Id JOIN (SELECT Clovek, max(Datum) Datum FROM Lidi GROUP BY Clovek) k2 ON l.Clovek=k2.Clovek AND l.Datum=k2.Datum ";
using (SqlCeDataAdapter adapter = new SqlCeDataAdapter(dotaz, spojeni))
using (DataSet vysledky = new DataSet())
{
adapter.Fill(vysledky);
foreach (DataRow radek in vysledky.Tables[0].Rows)
{
dataGridView1.Rows.Add(radek["Id"], radek["BarvaId"], radek["Clovek"],radek["Barva"], radek["Datum"]);
}
}
spojeni.Close();
}
Funguje to, ale nevím zda je to optimální řešení
"SELECT a.Id, a.Clovek, a.BarvaId, MAX(a.Datum), b.Id, b.Barva FROM Lidi a LEFT JOIN Barvy b ON a.BarvaId = b.Id GROUP BY a.Id, a.Clovek, a.BarvaId, b.Id, b.Barva";
Zobrazeno 14 zpráv z 14.
