TOP 1 dla każdego wiersza w tabeli

0

Witam mam zapytanie:

SELECT top 1 t1.childnum FROM OITT T0 INNER JOIN ITT1 T1 ON T0.[Code] = T1.[Father] 
order by t1.ChildNum DESC 

czy można wyświetlić w wynikach wartość top 1 w wynikach dla każdego indeksu w mojej tabeli? np.

SELECT top 1 t1.childnum FROM OITT T0 INNER JOIN ITT1 T1 ON T0.[Code] = T1.[Father] where T0.[Code] = (tutaj chciałbym listę wartości i dla każdej ma być wartość top)
order by t1.ChildNum DESC 

Czy mam użyć jakiejś funkcji?

Listwa wartości chciałem użyć przy wykorzystaniu Power Query, a konkretnie zaczytać z danej kolumny ale z tym będę się męczył w następnym kroku.

0
SELECT *, (SELECT TOP 1 childnum  FROM ITT1 T1 WHERE T1.Father=T0.cos) FROM OITT T0 
1

Dla wersji >= 2005:

SELECT 
    CHILDNUM
FROM
     (SELECT
        t1.childnum
        ,ROW_NUMBER() OVER (PARTITION BY T1.FATHER order by t1.ChildNum DESC) R
     FROM 
          OITT T0 
          INNER JOIN ITT1 T1 ON T0.[Code]. = T1.[Father] 
     where 
        T0.[Code] in (1,2,3,4,5,6)
    ) DT
WHERE
    R=1

Zakładam, że chcesz każdy pierwszy wiersz dla father

0
Panczo napisał(a):

Dla wersji >= 2005:

SELECT 
    CHILDNUM
FROM
     (SELECT
        t1.childnum
        ,ROW_NUMBER() OVER (PARTITION BY T1.FATHER order by t1.ChildNum DESC) R
     FROM 
          OITT T0 
          INNER JOIN ITT1 T1 ON T0.[Code]. = T1.[Father] 
     where 
        T0.[Code] in (1,2,3,4,5,6)
    ) DT
WHERE
    R=1

Zakładam, że chcesz każdy pierwszy wiersz dla father

Wielkie dzięki ta wersja działa bezbłędnie. Dodałem tylko Code i w IN musiały być stringi. Teraz mam pytanie gdzie najlepiej zrobić tak aby to w warunku where IN indeksy zaciągnąć z kolumny z excela (każdy kolejny wiersz miałby być w klauzuli WHERE) Czytałem o Power query? Dobry wybór?

SELECT 
    CHILDNUM, code
FROM
     (SELECT
        t1.childnum, t0.[Code]
        ,ROW_NUMBER() OVER (PARTITION BY T1.FATHER ORDER BY t1.ChildNum DESC) R
     FROM 
          OITT T0 INNER JOIN ITT1 T1 ON T0.[Code] = T1.[Father] 
     WHERE 
        T0.[Code] IN ('606000011', '603200001')
    ) DT
WHERE
    R= 1
0

Nie jestem ekspertem od Power Query ale wydaje mi się, że nie jesteś wstanie wprost zdefiniować listy do where. Obejście:

  1. Tworzysz kwernde do SQL
  2. Tworzysz kwerendę do pliku xls
  3. Scalasz ze sobą te dwa zapytania
0
Panczo napisał(a):

Nie jestem ekspertem od Power Query ale wydaje mi się, że nie jesteś wstanie wprost zdefiniować listy do where. Obejście:

  1. Tworzysz kwernde do SQL
  2. Tworzysz kwerendę do pliku xls
  3. Scalasz ze sobą te dwa zapytania

Tak miałeś racje. Zrobiłem tą procedurą i poszło bez problemu INNER JOINEM w Power Query. Zmodyfikowałem tylko lekko query może komuś się przyda.

SELECT 
    CHILDNUM, code
FROM
     (SELECT
        t1.childnum, t0.[Code]
        ,ROW_NUMBER() OVER (PARTITION BY T1.FATHER ORDER BY t1.ChildNum DESC) R
     FROM 
          OITT T0 INNER JOIN ITT1 T1 ON T0.[Code] = T1.[Father] 
     WHERE 
        T0.[Code] IN (select t0.[Code]FROM OITT T0)
    ) DT
WHERE
    R= 1

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