Autor Téma: Správny SQL príkaz na SELECT  (Přečteno 1933 krát)

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 58
  • Karma: 0
    • Verze Delphi: XE2 + 10.3 Community Edition
    • RQ Money
Správny SQL príkaz na SELECT
« kdy: 10-09-2014, 13:45:01 »
Ahojte, potrebujem poradiť s SQL príkazom (používam SQLite v Lazaruse - ide o 2 tabuľky (meny a kurzy), ktoré slúžia na zobrazovanie kurzových lístkov pre dané meny v jeden konkrétny deň).
Vytvorené sú nasledovne:
Kód: [Vybrat]
// vytvorenie tabuľky MENY
QRY.SQL.Text := 'CREATE TABLE c_meny (m_kod TEXT UNIQUE, m_nazov TEXT, m_stat TEXT, m_mnozstvo INTEGER, m_id INTEGER PRIMARY KEY NOT NULL)';
// vytvorenie tabuľky KURZY
QRY.SQL.Text := 'CREATE TABLE c_kurzy (k_datum TEXT, k_m_id INTEGER, k_kurz REAL, k_id INTEGER PRIMARY KEY NOT NULL, UNIQUE (k_datum, k_m_id))';

Mám problém s výberom meny a kurzu pre daný deň, pretože chcem vybrať pre daný deň nielen kurz (s tým by nebol problém), ale ešte aj posledný kurz pred daným dňom. Niečo podobné ako tento príkaz (ktorý síce ťahá posledný kurz, ale len prvej meny. Potrebujem pre každú jednu menu potiahnuť predošlý kurz...).
Kód: [Vybrat]
SQL.Text := 'SELECT m_stat, m_nazov, m_mnozstvo, m_kod, k_kurz, m_id, ' +
  '(SELECT k_kurz FROM c_meny INNER JOIN c_kurzy ON (k_m_id = m_id) WHERE k_datum < "' + FormatDateTime('YYYY-MM-DD', Calendar.DateTime) + '" ORDER BY k_datum DESC LIMIT 1) as kurz2' +
'FROM c_meny ' +
'LEFT JOIN c_kurzy ON (k_m_id = m_id) ' +
'WHERE k_datum = "' + FormatDateTime('YYYY-MM-DD', Calendar.DateTime) + '"';

Je niečo podobné možné? Vďaka za každú radu.
Lazarus, Delphi - RQ Money

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Správny SQL príkaz na SELECT
« Odpověď #1 kdy: 10-09-2014, 19:49:26 »
tak už to v podstatě máš, akorát v subselectu se odkaž na data z té vnější tabulky, něco jako

(select k_kurz from c_kurzy where k_m_id = c_meny.m_id and nejaka_podminka_na_datum)

místo toho joinu nové tabulky

a místo formátování parametrů do stringu je lepší použít dotaz s parametry...
« Poslední změna: 10-09-2014, 19:52:46 od Mi.Chal. »

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 58
  • Karma: 0
    • Verze Delphi: XE2 + 10.3 Community Edition
    • RQ Money
Re:Správny SQL príkaz na SELECT
« Odpověď #2 kdy: 11-09-2014, 06:54:52 »
A vieš, Mi.Chal., že to funguje?
Išiel som na to nesprávne, naozaj stačilo použiť jednoduchý subSELECT:
Kód: [Vybrat]
(SELECT k_kurz FROM c_kurzy WHERE k_m_id = m_id AND k_datum < "' + FormatDateTime('YYYY-MM-DD', Calendar.DateTime) + '" ORDER BY k_datum DESC LIMIT 1)Vďaka za nakopnutie, šlape to.  ;)
Lazarus, Delphi - RQ Money