我有下表
CREATE TABLE "matches" (
"match_id" INTEGER,
"uts" INTEGER,
"player_id" INTEGER,
"opponent_id" INTEGER
);
我想获取每场比赛中球员和对手在该特定比赛之前已经交手的比赛次数。
uts
代表时间戳,可用于过滤数据。S.
假设我有以下数据
39943359 1678449600 1 2
39943361 1678449600 3 4
39943363 1678451400 5 6
39943365 1678451400 5 6
39943367 1678453200 5 6
39943369 1678453200 1 3
39943371 1678455000 1 2
39943373 1678455000 1 5
我期望以下结果:
39943359 0
39943361 0
39943363 0
39943365 1
39943367 2
39943369 0
39943371 1
39943373 0
如何将
uts
条件包含在 中
SELECT match_id, COUNT(*)
FROM matches
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM matches
GROUP BY player_id, opponent_id
)
我能够实现预期的输出
WITH tuples AS (
SELECT m.match_id AS id, older.match_id AS older
FROM matches AS m LEFT JOIN matches AS older
ON m.player_id = older.player_id
AND m.opponent_id = older.opponent_id
AND m.uts >= older.uts
AND m.match_id >= older.match_id
) SELECT id, COUNT(*)-1
FROM tuples
GROUP BY id;
不过,我不确定如何解释 39943363 和 39943365 的
uts
是相同的。如果两场比赛同时发生,哪一场比赛应被视为“先于”另一场比赛发生? (我使用match_id
上的比较解决了它,但我不确定这是否是你想要的。)