私は小さなMariaDBデータベースを扱っています。ユーザーごとの時間間隔を抽出するには、私は次のクエリを使用します。SQL(MariaDB)で重複したSELECT句を避ける方法
SELECT
SUM(TIMESTAMPDIFF(SECOND,Activity.startTime,Activity.endTime)) AS seconds,
TIME_FORMAT(SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND,Activity.startTime,Activity.endTime))),'%Hh %im %ss') AS formattedTime,
TSUser.name
FROM Activity
INNER JOIN User ON User.id = Activity.userID
GROUP BY User.id
ORDER BY seconds DESC;
を私は私のクエリに見られるように、それによって結果を注文できるようにするには、プレーン秒(... AS seconds
)としての時間を選択する必要があります。
しかし、私はまた、TIME_FORMAT
関数を使用するために、MariaDBに時間間隔をフォーマットさせたいと思います。問題は、私はTIME_FORMAT
の中のSUM(...)
のフレーズ全体を再現しなければならないということです。これはあまりエレガントではないようです。 MariaDBは重複を認識してSUM
を1回だけ計算しますか?また、SUM
を複製せずに同じ結果を得る方法はありますか?
私は、これはネストされたクエリで可能でなければなりません考え出したので、同様に構築:
SELECT
innerQuery.name,
innerQuery.seconds,
TIME_FORMAT(SEC_TO_TIME(innerQuery.seconds), '%Hh %im')
FROM (
//Do the sum here, once.
) AS innerQuery
ORDER BY innerQuery.seconds DESC;
はこれが行うには、「OK」それを行うための最善の方法/ですか?
注:結果に生の秒は必要ありません。フォーマットされた時間だけが必要です。
私は助けていただきありがとうございます。
申し訳ありませんが、アドバイスありがとうございます。あなたは正しいです、上記の例の時間形式は、結果を正しくソートするために使用できます。私のテストではこれは一度は失敗しましたが、おそらく別の時刻形式を使用していました。 – Bensge