2

私はこのようなクエリを持っています:

SELECT PlayerID, COUNT(PlayerID) AS "MatchesPlayed", Name, Role, Team,
       SUM(Goals) As "TotalGoals", SUM(Autogoals) As "TotalAutogoals",
       SUM(...)-2*SUM(...)+2*SUM(...) AS Score, ...
FROM raw_ordered
GROUP BY PlayerID
ORDER BY Score DESC

ここでraw_ordered、各行は、ある試合でのあるプレーヤーのパフォーマンスを時系列の逆順に示しています。

このクエリから取得したものでグループ化しているのでPlayerID、各行が一部のプレーヤーに関する累積データを提供するテーブルです。現在、集計関数を持つ列に問題はありません。私の問題はTeamコラムにあります。

プレーヤーはシーズン中にチームを変更できます。ここで私が興味を持っているのは、彼が最後 Teamに遊んだことです。そのためSELECT、各グループで最初に出会った値をTeam列(または、一般に、非集計関数の列)に取るように指示する方法が必要です。 )。

残念ながら、SQLiteでこれを行う(簡単な)方法は見つからないようです。ドキュメントSELECTは次のように書かれています。

式が集計式の場合、グループ内のすべての行で評価されます。それ以外の場合は、グループ内から任意に選択された単一の行に対して評価されます

この動作を変更する方法についての提案はなく、集約関数の間に、最初に遭遇した値をとるだけのものを見つけることができません。

何か案が?

4

2 に答える 2

1

SQLiteには「最初の」集計関数はありません。自分で実装する必要があります。

ただし、ドキュメントは古くなっています。SQLite 3.7.11MIN()以降、またはが存在する場合MAX()、その最小/最大値の元となるレコードが選択されることが保証されます。

したがって、列リストに追加MAX(MatchDate)するだけです。SELECT

于 2012-11-11T19:44:40.430 に答える
0
SELECT PlayerID, COUNT(PlayerID) AS "MatchesPlayed", Name, Role, 
(SELECT Team FROM raw_ordered GROUP BY PlayerID ORDER BY some_date) AS team,
SUM(Goals) As "TotalGoals", SUM(Autogoals) As "TotalAutogoals",
SUM(...)-2*SUM(...)+2*SUM(...) AS Score, ...
FROM raw_ordered
GROUP BY PlayerID
ORDER BY Score DESC

おそらく、サブクエリを使用して目標を達成できるように、テーブルに出力を並べ替える方法があります。

于 2012-11-11T18:39:01.663 に答える