我知道这是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
我正在尝试了解您的需求,如果我是对的,这会做到的:如你所说:
我想从一个已经存在的表中获取最大条目(“ 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)
并且取决于您的数据库是什么,查询可能会有所不同...
所以,几个小时后,我搞清楚了:
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