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
上記の最初の 3 つのランタイムは同じユーザーとセッションからのもので、最後の 1 つは別のユーザーとセッションからのものです。同じ starttime から最後のランタイムをカウントして合計したいだけで、挿入された最大日付 (pk_date) -> 356 + 475 が必要な値です。
別の同様のクエリでは、すべての値が累積されます (列 starttime、endtime、pk_date は含まれていないため、クエリはすべてのユーザーのすべてのランタイム値の合計を作成します)。DISTINCT と MAX(pk_date) を使用しようとしましたが、期待どおりに機能しませんでした。サブクエリを使用する必要がありますか?