[SQL] Wartosci zapytania agregujacego

0

Witam
Mam tabele z numerami kont, wartoscia i data.

Potrzebuje wybrac wszystkie konta i ich wartosci o ostatniej dla nich dacie

SELECT konto, wartosc, max(data)
FROM Tabela
GROUP BY konto, wartosc

problem pojawia sie, gdyz wartosci sa rozne i zwraca mi pare rekordow dla tego samego konta z roznymi wartosciami i maksymalnej dla nich daty.

Ogolnie dla ostatniej daty wiem, ze jest tylko jedna wartosc. Idealnym rozwiazaniem byloby tu uzycie fukcji agregujacej FIRST, jednak nie jest ona dostepna w SQL Serverze 2000.

Ktos ma jakis pomysl jak to rozwiazac?

0

Nie rozumiem. Skoro masz dla Max(Date) tylko jedną wartość to jakim cudem masz kilka wyników?? Coś namieszałeś. Nie do końca umiem się odnaleźć w Twoim problemie.

0

Zobacz czy wartości kolumny konto są unikalne.
No ale chyba nie są skoro chcesz max(data).

Spróbuj to:

select t.konto, t.wartosc, t.data  from table1 as t, (select konto,max(data) as data from table1
group by konto) as t2 where t.konto = t2.konto and t.data = t2.data
0

Moze przedstawie moj problemik nieco bardziej szczegolowo. Przykladowe dane w tabeli:

konto wartosc data
01 3 2007-10-12
01 1 2006-11-02
01 6 2007-12-13
02 9 2003-01-22
02 7 2003-03-12
02 5 2003-06-01
05 2 2005-04-12
05 6 2005-04-21
05 4 2007-05-06

i z takiej tabelki chcialbym otrzymac wiersze: (dla kazdego konta, wartosc o najwiekszej dacie)
01 6 2007-12-13
02 5 2003-06-01
05 4 2007-05-06

oczywiscie to jest bardzo uproszczony obraz, bo tych kont beda tysiace, a rekordow setki tysiecy, jak i poza wartosc, to nie bedzie jedna kolumna tylko rozne, odnosnie jednego konta.
Jednak rozwiazanie takiego przykladu bardzo by mi pomoglo :) Pamietac trzeba, ze to SQL2000 i nie ma funkcji agregujacej First

Ma ktos pomysl na jakies dobre i szybkie zapytanie na to? Problem chyba banalny dla czlowieka od baz, niestety ja z sql'a asem nie jestem :P

0

Zawsze mozesz zrobic procedurke skladowana, a w niej tabele tymczasowa do ktorej pakujesz konto i date z zapytania agregujacego (bo konto i data to klucz glowny) po czym laczysz z tabela wlasciwa i wybierasz co chcesz.
Natomiast za 'optymalnosc' tego rozwiazania nie dam sobie reki uciac. ;)

//Poprawka
Albo bezprocedurkowo mozna tak:

create view LastValues
as
select konto, max(date) as date from konta group by konto

select * from konta k inner join LastValues v on (k.konto = v.konto and k.Date = v.Date)

1 użytkowników online, w tym zalogowanych: 0, gości: 1