funkcja MAX w SQL

Z6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Witam wszystkich
bardzo proszę o pomoc, zapytanie poniższe zwraca mi wartość maksymalną "number" dla wszystkich kombinacji cId oraz mId z tablicy "Measurement"

Kopiuj
SELECT "cId", "mId", MAX("number") as "Maxnumber" FROM "Measurement" 
GROUP BY "cId", "mId";

Jak zmodyfikować takie zapytanie by otrzymać wyniki tylko dla kombinacji cId i mId dla których max number jest równy np. 1 ?
Pozdrawiam

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

Mógłbyś podać przykład wartości cId, mId oraz spodziewane wyniki?

Co na prawdę próbujesz zrobić?

PD
  • Rejestracja: dni
  • Ostatnio: dni
0

dla MS SQL będzie coś takiego

Kopiuj
SELECT cId, mId, MAX(number) Maxnumber FROM Measurement GROUP BY cId, mId
having(max(number))=1
Z6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0
Riddle napisał(a):

Mógłbyś podać przykład wartości cId, mId oraz spodziewane wyniki?

Co na prawdę próbujesz zrobić?

Paweł Dmitruk napisał(a):

dla MS SQL będzie coś takiego

Kopiuj
SELECT cId, mId, MAX(number) Maxnumber FROM Measurement GROUP BY cId, mId
having(max(number))=1

OK wszystko działa dzięki wielkie
Mam jeszcze jedno pytanie... to jest sedno mojego problemu mogę w ten sam sposób usunąć te rekordy z bazy 9tzn te dla których max(number) = 1) ?

Z6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

To zapytanie (za które bardzo dziękuję) pokazuje wszystkie rekordy dla których max(number) = 1
jeżeli teraz chcę usunąć te rekordy z bazy to jak zastosować funkcję DELETE ?

Kopiuj
SELECT cId, mId, MAX(number) Maxnumber FROM Measurement GROUP BY cId, mId
having(max(number))=1
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

Nie zrobisz delete na zapytaniu grupujacym. Pytanie co wyróżnia rekord do usunięcia?

Z6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Witam dzięki za reakcję
Muszę usunąć te rekordy z tablicy Measurement, dla których maksymalna liczba pomiarów jest równa 1 max(number) = 1

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

To wiem, pytanie było co wyróżnia taki rekord, cię, czy może coś i mid

PD
  • Rejestracja: dni
  • Ostatnio: dni
0

jeżeli chcesz usunąć wszystkie pary cid-mid dla których maksymalna wartość kolumny number to 1, to możesz zrobić za pomocą join-a:

Kopiuj
delete m from Measurement m inner join (SELECT cId, mId FROM Measurement GROUP BY cId, mId having(max(number))=1) f on (m.cid=f.cid and m.mid=f.mid)
Z6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

OK rozumie
w tablicy Measurement mam min trzy kolumny cId oraz mId no i kolumnę number gdzie rejestrowane są kolejno pomiary. Muszę usunąc te rekordy gdzie dla kombinacji wartości cId oraz mId max number = 1
prosze o pomoc, dziękuje

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

@Paweł Dmitruk już ci odpowiedział jak to zrobić.

Z6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Witam ponownie
Otrzymuję syntax error dla delete m pracuje w postgresie

delete m from Measurement m inner join (SELECT cId, mId FROM Measurement GROUP BY cId, mId having(max(number))=1) f on (m.cid=f.cid and m.mid=f.mid)

PD
  • Rejestracja: dni
  • Ostatnio: dni
0

w PostgreSQL powinno zadziałać:

Kopiuj
delete from Measurement m using (SELECT cId, mId FROM Measurement GROUP BY cId, mId having(max(number))=1) f where m.cid=f.cid and m.mid=f.mid

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.