我对 SQL 查询有疑问。我想计算使用过的应用程序的运行时间。但是在数据库中,日期值被插入不止一次。我只需要 pk_date 列的最大值,并且不需要 starttime 列中的重复条目。
这是 SQL 查询:
SELECT DISTINCT Standortname,
DATEPART(YEAR,PK_Date) AS Jahr,
DATEPART(month,PK_Date) AS Monat,
Lizenzname,
COUNT(DISTINCT username) AS AnzahlUser,
SUM(DISTINCT DATEDIFF(minute,starttime ,pk_date)) AS RuntimeMinute,
endtime,
pk_date
FROM BenutzerLizenz,Benutzer,Abteilung,Lizenz,Standort
WHERE
BenutzerLizenz.PK_ID_user=Benutzer.PK_ID_user
AND BenutzerLizenz.PK_ID_lic=Lizenz.PK_ID_lic
AND PK_ID_standort=FK_ID_standort
AND DATEPART(month,PK_Date) = '04'
AND DATEPART(YEAR,PK_Date) = '2013'
AND Lizenzname = 'iman_1st'
AND Standortname = 'Unterlüß'
GROUP BY
Standortname,
DATEPART(YEAR,PK_Date),
DATEPART(month,PK_Date),
Lizenzname,
starttime,
endtime,
pk_date
结果如下:
... RuntimeMinute starttime pk_date
339 2013-04-11 11:05:00.0000000 2013-04-11 16:44:37.9650000
346 2013-04-11 11:05:00.0000000 2013-04-11 16:51:25.4800000
356 2013-04-11 11:05:00.0000000 2013-04-11 17:01:19.9670000
475 2013-04-11 10:06:00.0000000 2013-04-11 18:01:15.6620000
上面的前三个运行时来自同一个用户和会话,最后一个来自另一个用户和会话。我只想计算和总结同一开始时间的最后一次运行时间,插入的最大日期 (pk_date) -> 356 + 475 是我想要的值。
在另一个类似的查询中,所有值都被累积(列 starttime、endtime、pk_date 不包括在其中,因此查询为所有用户构建所有运行时值的总和)。我尝试使用 DISTINCT 和 MAX(pk_date) 但它没有按预期工作。我必须使用子查询吗?