Получение наибольшей «дауэровской» записи из таблицы, созданной по запросу - PullRequest
0 голосов
/ 04 ноября 2019

Я знаю, что это общая проблема с SQL, и я уже нашел много объяснений, как это сделать, но я просто не могу понять, как это сделать, когда в таблице я хочу получить максимальную запись (для dauer) из таблицы, которая уже создана запросом.

Я использую базу данных SQL Server. Я очень надеюсь, что вы, ребята, можете дать мне подсказку об этом.

SELECT 
    foo.vname, foo.nname, foo.sw_name,  
    SUM(foo.dauer) AS dauer 
FROM
    (SELECT 
         benutzer.vname, benutzer.nname, verwendung.sw_name, verwendung.dauer
     FROM 
         benutzer 
     INNER JOIN 
         verwendung ON benutzer.login = verwendung.login 
                    AND benutzer.pw = verwendung.pw
     GROUP BY 
         benutzer.login, benutzer.pw, verwendung.sw_name, verwendung.dauer
     ORDER BY 
         benutzer.vname ASC, benutzer.nname ASC, verwendung.sw_name ASC) AS foo
GROUP BY 
    foo.vname, foo.nname, foo.sw_name

РЕДАКТИРОВАТЬ: Уточнение того, что я хочу знать

Я хочу получить те записи таблицы, которые имеютмаксимальное значение в столбце dauer.

Например:

Для Ады должно быть Ада - Лавлейс - Пресмейкер - 910

Table from my query

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Итак, через пару часов я выяснил это:

SELECT vname, nname, sw_name, dauer
FROM

(SELECT login, pw, sw_name, dauer
  FROM 
    (SELECT sw_hersteller,sw_name, benu.login, benu.pw, sum(dauer) dauer
    FROM benutzer benu, verwendung verw
    WHERE benu.pw = verw.pw AND benu.login=verw.login
    GROUP BY sw_hersteller, sw_name, benu.login, benu.pw
    ORDER BY vname asc, nname asc) AS foo
  GROUP BY foo.login, foo.pw, foo.sw_name, foo.dauer
  HAVING foo.dauer >= ALL(
  SELECT sum(verwendung.dauer)
  FROM verwendung
  WHERE foo.pw = verwendung.pw AND foo.login = verwendung.login
  GROUP BY login, pw, sw_name, sw_hersteller))as faa 
INNER JOIN benutzer b
ON b.login = faa.login AND b.pw = faa.pw

ORDER BY vname ASC, nname ASC, sw_name ASC
0 голосов
/ 04 ноября 2019

Я пытаюсь понять, что вам нужно, и если я прав, это сделает это: Как вы говорите:

Я хочу получить максимальную запись (для "Дауэра") из таблицыкоторый уже создан запросом

select foo2.vname
       , foo2.nname
       , foo2.sw_name
       , foo2.dauer 
from (
      SELECT foo.vname
             , foo.nname
             , foo.sw_name
             ,  SUM(foo.dauer) AS dauer 
      from (SELECT benutzer.vname
                   , benutzer.nname
                   , verwendung.sw_name
                   , verwendung.dauer
            FROM benutzer 
            INNER JOIN verwendung 
            ON benutzer.login = verwendung.login 
               AND benutzer.pw = verwendung.pw
            GROUP BY benutzer.login
                     , benutzer.pw
                     , verwendung.sw_name
                     , verwendung.dauer
            ORDER BY benutzer.vname ASC
                     , benutzer.nname ASC
                     , verwendung.sw_name ASC)AS foo
      GROUP BY foo.vname
               , foo.nname
               , foo.sw_name) as foo2
where foo2.dauer = (select max(foo3.dauer) 
                    from (SELECT foo.vname
                                 , foo.nname
                                 , foo.sw_name
                                 ,  SUM(foo.dauer) AS dauer 
                          from (SELECT benutzer.vname
                                       , benutzer.nname
                                       , verwendung.sw_name
                                       , verwendung.dauer
                                FROM benutzer 
                                INNER JOIN verwendung 
                                ON benutzer.login = verwendung.login 
                                AND benutzer.pw = verwendung.pw
                                GROUP BY benutzer.login
                                         , benutzer.pw
                                         , verwendung.sw_name
                                         , verwendung.dauer
                                ORDER BY benutzer.vname ASC
                                         , benutzer.nname ASC
                                         , verwendung.sw_name ASC)AS foo
                          GROUP BY foo.vname
                                   , foo.nname
                                   , foo.sw_name) foo3
                    where foo3.vname = foo2.name 
                    and foo3.nname = foo2.nname 
                    and foo3.sw_name ) foo.sw_name)

И в зависимости от того, что ваша база данных, запрос может немного отличаться ...

...