从查询创建的表中获取最大的“ dauer”条目

问题描述 投票:0回答:2

我知道这是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列中具有最大值的那些条目。

例如:

因为Ada应该是Ada-Lovelace-Presmaker-910

Table from my query

sql greatest-n-per-group
2个回答
0
投票

我正在尝试了解您的需求,如果我是对的,这会做到的:如你所说:

我想从一个已经存在的表中获取最大条目(“ dauer”)通过查询创建

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)

并且取决于您的数据库是什么,查询可能会有所不同...


0
投票

所以,几个小时后,我搞清楚了:

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
© www.soinside.com 2019 - 2024. All rights reserved.