【问题标题】:MYSQL filter our same rows that are next to each otherMYSQL 过滤我们彼此相邻的相同行
【发布时间】:2016-06-03 23:32:16
【问题描述】:

我有这张桌子,类似于下面的一张。 表格显示玩家积分:

  • s主要玩家积分
  • d 次要点;
  • 日期计算时间。

我希望能够过滤与 sd 彼此相邻的行。日期应与最后一个相同。

例如,这里我们应该跳过 ri - 13,因为它与 ri -12 相同。也跳过 ri - 15,19,20,21,22,23 等等。但不应跳过和分组第 28、29、30、31 行。

我问是因为 GROUP BY 对我的情况不起作用。有什么想法吗?

表格示例:

ri  date        s   d
1   2016-05-23  4   355
2   2016-05-16  4   352
3   2016-05-09  4   349
4   2016-05-02  4   352
5   2016-04-25  4   358
6   2016-04-18  4   359
7   2016-04-11  4   200
8   2016-04-04  4   201
9   2016-03-21  4   198
10  2016-03-07  4   199
11  2016-02-29  4   201
12  2016-02-22  4   203
13  2016-02-15  4   203
14  2016-02-08  4   200
15  2016-02-01  4   200
16  2016-01-18  4   201
17  2016-01-11  4   198
18  2016-01-04  4   183
19  2015-12-28  4   183
20  2015-12-21  4   183
21  2015-12-14  4   183
22  2015-12-07  4   183
23  2015-11-30  4   183
24  2015-11-23  4   182
25  2015-11-16  4   149
26  2015-11-09  4   148
27  2015-11-02  4   145
28  2015-10-26  4   109
29  2015-10-19  4   110
30  2015-10-12  4   109
31  2015-10-05  4   110
32  2015-09-28  4   106
33  2015-09-21  4   108
34  2015-09-14  4   109
35  2015-08-31  5   108
36  2015-08-24  5   108
37  2015-08-17  5   136
38  2015-08-10  5   136
39  2015-08-03  4   123
40  2015-07-27  4   122
41  2015-07-20  4   125
42  2015-07-13  4   126
43  2015-06-29  4   130
44  2015-06-22  4   128
45  2015-06-15  4   126
46  2015-06-08  4   120
47  2015-05-25  9   120
48  2015-05-18  9   122
49  2015-05-11  9   121
50  2015-05-04  9   119
51  2015-04-27  9   122
52  2015-04-20  10  124
53  2015-04-13  9   173
54  2015-04-06  9   172
55  2015-03-23  8   174
56  2015-03-09  7   89
57  2015-03-02  7   89
58  2015-02-23  7   92
59  2015-02-16  7   96
60  2015-02-09  8   93
61  2015-02-02  9   88
62  2015-01-19  4   89
63  2015-01-12  4   89
64  2015-01-05  4   94

【问题讨论】:

  • 您好,澄清一下,目前我做SELECT date, s, d FROM player_points WHERE player_id = 1497103 AND date > '2015-01-01' 如果我做SELECT date, s, d FROM player_points WHERE player_id = 1497103 AND date > '2015-01-01' GROUP BY s,d 它会跳过一些对我来说很重要的结果。
  • imo,请不要在 cmets 中发布代码 - 它不可读。而是将其添加到您的问题中。这样,1)我们可以很容易地理解它。 2) 新人无需阅读 cmets 即可了解您决定向我们解释的所有信息。之后,您可以删除评论,因为它只会使线程更难理解。如果你得到一个有效的答案,那么你就不需要费心了:)
  • 我确切地知道数据集的样子。但我不知道所需的结果集应该是什么样子。我想知道你是否可以通过某种方式解决这个问题?

标签: mysql sql group-by grouping


【解决方案1】:

你可能需要加入..

select a.*, b.* 
from my_table as a 
inner join my_table as b on a.ri  != b.ri 
where (a.d - b.d) = 0;

【讨论】:

    【解决方案2】:

    这可以使用not exists 来完成。这将选择具有相同 s 和 d 的许多行中的第一行。

    select *
    from tablename t1
    where not exists (select 1 from tablename t2 
                      where t1.ri = t2.ri+1 and t1.s = t2.s and t1.d = t2.d)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多