使用 SQLite 查找条件重复项

问题描述 投票:0回答:1

我有下表

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
)
sqlite
1个回答
0
投票

我能够实现预期的输出

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上的比较解决了它,但我不确定这是否是你想要的。)
    

© www.soinside.com 2019 - 2024. All rights reserved.