Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

SQL - funkcja MAX i pobieranie "aktualnych danych"

janek1111 22 Jun 2014 11:30 1557 11
  • #1
    janek1111
    Level 13  
    Witam. Mam problem z użyciem funkcji MAX w SQL na platformie VB NET. Przy pobieraniu danych z bazy typu mdb muszę spełnić warunek. A mianowicie mam kilka kolumn w tym jedną z datą a drugą z liczbą (nr ewid.). Nr ewid. w bazie się powtarzają oprócz daty (która świadczy o wersji danych w wierszu). Warunek polega na tym, żeby pobrać dane dla danego nr ewid. z całego wiersza, gdzie wspomniana data jest najświeższa. Korzystałem z poniższego kodu:

    Code: sql
    Log in, to see the code


    Kod ten wiadomo pobiera datę i nr, ale nie resztę danych z wiersza. Nie mam pojęcia właśnie jak pobrać resztę przy jednym zapytaniu. Próbowałem coś z tzn. subselect'em, przejrzałem trochę for angielskich i nic pod vb net nie podchodzi...
  • #2
    cepelia
    Level 20  
    Ale to sobie trzeba napisać, jakie pola chcesz... bo masz tylko dwa w tej chwili.. tzn NrEwidKontrahenta i datę...
  • #3
    janek1111
    Level 13  
    Jak sobie dopiszę resztę pól do tego zapytania, to jest błąd...
  • #4
    mi14chal
    Level 28  
    To jak wygląda to zapytanie? I jaki jest błąd? Bo wróżki dzisiaj mają wolne...
  • #5
    janek1111
    Level 13  
    Zapytanie wygląda jw. tylko z dopisanymi za select'em dodatkowymi polami. VB jako takiego błędu nie "wypluwa". Potem następuje end sub.
  • #6
    mi14chal
    Level 28  
    To w końcu jest błąd czy nie?
  • #7
    cepelia
    Level 20  
    Proponuję stroić zapytania nie w visual studio tylko sql menagment studio...

    Poza tym tak na przyszłość, żeby otrzymać jak najszybciej poprawną odpowiedź należało by wysilić się i podać chociaż strukturę tabeli, przygotować skrypt generujący przykładowe dane i opisać o co chodzi...

    Prawdopodobnie chodzi ci o coś takiego...

    Code: sql
    Log in, to see the code


    I tak jak mówię na przyszłość najlepiej dokładnie opisać problem i podać jak najwięcej danych.. bo tak prawdę mówiąc to nikomu się nie chcę uprawiać wróżbiarstwa...
  • #8
    janek1111
    Level 13  
    No niestety jestem amatorem w programowaniu i na bieżąco w temacie nie siedzę. Czasem korzystam z dobrodziejstw programowania i dzięki temu mogę optymalnie wykonać jakieś biurowe zadania. Właśnie dopiero teraz mam czas, aby powrócić do tematu. Twoje zapytanie oczywiście u mnie działa, tylko nie uwzględnia jednego warunku. A mianowicie, wyjściowo zapytanie powinno być odniesione nie tylko dla DataWstawienia, ale i dla NrEwidKontrahenta. Bo gdy daty przy rożnych NrEwidKontrahenta są takie same, to nieaktualne wiersze też są brane pod uwagę. Dla przykładu z tabeli:

    SQL - funkcja MAX i pobieranie "aktualnych danych"

    mają zostać pobrane dane dla pozycji 2 i 3, a nie 2,3 i 4. Oczywiście w bazie nie może zdarzyć się drugi wiersz o takim samym NrEwidKontrahenta i DataWstawienia.
  • #9
    cepelia
    Level 20  
    no tak ale grupuję wg nr kontrahenta... więc zasadniczo powinienem dostać po jednym rekordzie dla każdego kontrahenta...
  • #10
    janek1111
    Level 13  
    no tak, ale końcowym efektem są daty, które później odnosisz do DataWstawienia bez żadnego innego warunku. w przypadku powtarzania się dat w innych NrEwidKontrahenta występuje "błąd" - w moim przypadku...
  • #11
    cepelia
    Level 20  
    Rzucę na to okiem jutro w pracy...
    Prześlij jakiś przykładowy zestaw danych, bo wróżenie to nie jest moja mocna strona...
  • #12
    janek1111
    Level 13  
    Oczywiście problem rozwiązałem "półautomatycznie" przez kod w vb net:

    Code: vbnet
    Log in, to see the code


    Ale powyższe rozwiązanie mnie nie satysfakcjonuje, bo przy większej ilości danych robi się kłopotliwe. O jaki i w czym zestaw danych Ci chodzi?