logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?

marco233 30 Sie 2018 10:39 960 12
REKLAMA
  • #1 17413037
    marco233
    Poziom 6  
    Posty: 9
    Cześć

    Szukam pomocy w utworzeniu zapytania w sql, które z poniższej tabelki (Tabela 1), która zawiera historię zmiany cen, wyciągnię dla danego indeksu ostatnią zmianę ceny. Powinno to wyglądać tak jak w Tabela 2, a przy użyciu poniższego kodu wyciąga w postaci z Tabeli 3. Gdzie leży błąd?

    Tabela 1:
    Kod: Text
    Zaloguj się, aby zobaczyć kod


    Tabela 2:
    Kod: Text
    Zaloguj się, aby zobaczyć kod


    Tabela 3:
    Kod: Text
    Zaloguj się, aby zobaczyć kod


    SELECT CENY_DET.TOWAR_INDEKS, CENY_DET.CENA_E, Max(CENY_DET.DATA_OD) AS Data
    FROM CENY_DET
    WHERE CENY_DET.R_KAT_REG_KOD=1 AND CENY_DET.KAT_REG_KOD=1 AND CENY_DET.REG_KOD=1
    GROUP BY CENY_DET.TOWAR_INDEKS, CENY_DET.CENA_E
    ORDER BY CENY_DET.TOWAR_INDEKS
  • REKLAMA
  • #2 17413099
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    Nie podał kolega jaki SQL, wiec podam rozwiązanie dla FireBird-a:

    Kod: SQL
    Zaloguj się, aby zobaczyć kod


    Dane:
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?

    Wynik:
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?
  • REKLAMA
  • #3 17413223
    Dotnetvb
    Poziom 18  
    Posty: 309
    Pomógł: 23
    Ocena: 19
    Dodaj słowo desc na końcu zapytania, powinno pomóc.
  • #4 17413279
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    Dotnetvb napisał:
    Dodaj słowo desc na końcu zapytania, powinno pomóc.

    Kompletna bzdura!!!
  • REKLAMA
  • #5 17413353
    Dotnetvb
    Poziom 18  
    Posty: 309
    Pomógł: 23
    Ocena: 19
    Dlaczego uważasz że bzdura?

    Select * from tabela order by id desc limit 1

    Zwroci jeden wiersz z maksymalnym id w tabeli, inne rozwiazenie:

    Select max(id), tabela. * from tabela limit 1

    Powinno zwrócić ten sam rekord,
  • #6 17413452
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    Dotnetvb napisał:
    Powinno zwrócić ten sam rekord,

    To sugeruję to sprawdzić.
  • #7 17413751
    Dotnetvb
    Poziom 18  
    Posty: 309
    Pomógł: 23
    Ocena: 19
    Proszę bardzo sprawdziłem:

    Tabela:
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?


    Wynik zapytania:
    select ids_skanery from s_skanery order by ids_skanery desc limit 1:
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?

    Wynik zapytania:
    select max(ids_skanery) from s_skanery ;
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?
  • #8 17414021
    AdamFilipek
    Poziom 20  
    Posty: 294
    Pomógł: 41
    Ocena: 62
    Może Ci to coś podpowie:
    Kod: SQL
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #9 17414385
    marco233
    Poziom 6  
    Posty: 9
    arnoldziq napisał:
    Nie podał kolega jaki SQL, wiec podam rozwiązanie dla FireBird-a:

    Kod: SQL
    Zaloguj się, aby zobaczyć kod


    Dane:
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?

    Wynik:
    Jak użyć funkcji MAX w SQL, by wybrać ostatnią zmianę ceny dla indeksu?


    Łączę się Excelem z bazą przez ADODB.

    Wrzucając poniższy kod pojawia się błąd:
    ORA-00923: nie znaleziono słowa kluczowego FROM w oczekiwanym miejscu.

    Kod: SQL
    Zaloguj się, aby zobaczyć kod
  • #10 17414622
    Dotnetvb
    Poziom 18  
    Posty: 309
    Pomógł: 23
    Ocena: 19
    Oracle nie obsługuje first, nie mam teraz pod ręką tej bazy, spróbuj tak:
    SELECT c.TOWAR_INDEKS, c.CENA_E
    FROM CENY_DET c
    WHERE c.R_KAT_REG_KOD=1 AND c.KAT_REG_KOD=1 AND c.REG_KOD=1
    ROWNUM =1 ORDER BY c.CENA_E DESC, c.DATA_OD Desc

    Lub
    SELECT c.TOWAR_INDEKS, c.CENA_E
    FROM CENY_DET c
    WHERE c.R_KAT_REG_KOD=1 AND c.KAT_REG_KOD=1 AND c.REG_KOD=1
    ORDER BY c.CENA_E DESC, c.DATA_OD Desc
    fetch first 1 row only
  • #11 17414908
    marco233
    Poziom 6  
    Posty: 9
    Dotnetvb napisał:
    Oracle nie obsługuje first, nie mam teraz pod ręką tej bazy, spróbuj tak:
    SELECT c.TOWAR_INDEKS, c.CENA_E
    FROM CENY_DET c
    WHERE c.R_KAT_REG_KOD=1 AND c.KAT_REG_KOD=1 AND c.REG_KOD=1
    ROWNUM =1 ORDER BY c.CENA_E DESC, c.DATA_OD Desc

    Lub
    SELECT c.TOWAR_INDEKS, c.CENA_E
    FROM CENY_DET c
    WHERE c.R_KAT_REG_KOD=1 AND c.KAT_REG_KOD=1 AND c.REG_KOD=1
    ORDER BY c.CENA_E DESC, c.DATA_OD Desc
    fetch first 1 row only


    Niestety w obydwu przypadkach ORA-00933: polecenie SQL niepoprawnie zakończone.
  • #12 17414951
    Dotnetvb
    Poziom 18  
    Posty: 309
    Pomógł: 23
    Ocena: 19
    Dodaj tutaj kod do utworzenia tabeli (create Table...) sprawdzę dokładnie w czym rzecz
  • #13 17415004
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    MySQL oraz PostgreSQL używają klauzuli LIMIT, więc kod będzie wyglądał mniej-więcej w taki sposób :

    Kod: SQL
    Zaloguj się, aby zobaczyć kod

Podsumowanie tematu

✨ Użytkownik poszukiwał pomocy w stworzeniu zapytania SQL, które wyciągnie ostatnią zmianę ceny dla danego indeksu z tabeli zawierającej historię zmian cen. W odpowiedziach zaproponowano różne podejścia, w tym użycie klauzuli `ORDER BY` oraz `LIMIT` w MySQL i PostgreSQL, a także `ROWNUM` w Oracle. Wskazano, że w przypadku FireBird można użyć `SELECT FIRST 1`. Użytkownik napotkał problemy z błędami SQL, takimi jak ORA-00923 i ORA-00933, co sugeruje, że zapytania były niepoprawnie skonstruowane. Ostatecznie, podano kilka przykładów zapytań, które powinny działać w różnych systemach baz danych.
Wygenerowane przez model językowy.
REKLAMA