【问题标题】:No duplicates in rows after initial match初始匹配后行中没有重复项
【发布时间】:2019-10-01 17:02:29
【问题描述】:

实际上我什至不确定这是否可能,但我只是在碰运气,因为我已经尝试了一些东西,但无法真正掌握它。

我的桌子图片

我想要的: 我想要一次 gpID,并且我希望它在它首先发生的日期。 例如,gpID 1 和 2 在 8 月 28 日由 pID 1 完成。我不希望 gpID 1 和 2 包含在其他日期的结果中。 我尝试了 DISTINCT,它至少消除了每一行中的重复项,但是,它并不能真正解决我的问题。

SELECT
    GROUP_CONCAT( DISTINCT gpID) AS gpID,
    pID,
    score,
    FROM_UNIXTIME(DATE, '%Y %M %D') AS DATE
FROM
    points
where pID = 1
group by FROM_UNIXTIME(date, '%Y %M %D')

导致


gpID    pID         score   DATE    
1,2,3     1         125220  2019 August 28th    
1,2,3,4   1         30000   2019 September 16th

有什么方法可以消除 8 月 28 日之后所有日期的 gpID 1、2、3 吗?

【问题讨论】:

  • 它可能与this 部分重复。但是您的问题太不清楚,无法回答,甚至无法标记为重复。

标签: mysql sql duplicates subquery distinct


【解决方案1】:

编写一个子查询,获取每个gpID 的第一个日期。然后按日期分组。

SELECT DATE(FROM_UNIXTIME(mindate)) AS date , GROUP_CONCAT(gpID) AS gpID
FROM (
    SELECT gpID, MIN(date) AS mindate
    FROM points
    GROUP BY gpID
) AS x
GROUP BY date

【讨论】:

  • 谢谢,成功了,是否也可以包含/分组 pID?我知道我可以添加“其中 pID = 1”,但我宁愿查看所有 pID,而不是只选择特定的 ID。
  • 以什么方式包含它?同一日期不同gpID的pID可以不同。
  • 基本上,我希望 pID 包含在结果表中。所有这些,目前如果我想查看玩家 2 的结果,我必须在查询中添加“where pID = 2”。
  • 如果同一日期有多个 pID 值,您仍然没有解释如何包含它。它们需要单独的行吗?
  • 同一个gpID可以有多个pID吗?
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2015-06-08
相关资源
最近更新 更多