【问题标题】:getting filtered datas with sql query使用 sql 查询获取过滤后的数据
【发布时间】:2020-11-19 09:33:33
【问题描述】:

我有很多数据,其中有年份列
只要我设置了开始年份和结束年份,我想检查它是否连续有相同的数据

如果我将 2015 年设置为开始年份并将 2017 年设置为结束年份, 我必须得到具有相同数据 5 年的列

我尝试在查询中使用between,但我什至不知道该怎么做

数据看起来像这样

SELECT year,team,equip,result FROM my_table WHERE result = 41 AND year=2015
+------+-------+--------+--------+
| year | team  | equip  | result |
+------+-------+--------+--------+
| 2015 | teamA | equipA |   41   |
+------+-------+--------+--------+
| 2015 | teamA | equipB |   41   |
+------+-------+--------+--------+
| 2015 | teamB | equipA |   41   |
+------+-------+--------+--------+
| 2015 | teamB | equipB |   41   |
+------+-------+--------+--------+
| 2015 | teamC | equipA |   41   |
+------+-------+--------+--------+
| 2015 | teamC | equipB |   41   |
+------+-------+--------+--------+
...
SELECT year,team,equip,result FROM my_table WHERE result = 41 AND year=2016
+------+-------+--------+--------+
| year | team  | equip  | result |
+------+-------+--------+--------+
| 2016 | teamA | equipB |   41   |
+------+-------+--------+--------+
| 2016 | teamB | equipA |   41   |
+------+-------+--------+--------+
| 2016 | teamC | equipA |   41   |
+------+-------+--------+--------+
| 2016 | teamC | equipB |   41   |
+------+-------+--------+--------+
...
SELECT year,team,equip,result FROM my_table WHERE result = 41 AND year=2017
+------+-------+--------+--------+
| year | team  | equip  | result |
+------+-------+--------+--------+
| 2017 | teamA | equipA |   41   |
+------+-------+--------+--------+
| 2017 | teamB | equipA |   41   |
+------+-------+--------+--------+
| 2017 | teamB | equipB |   41   |
+------+-------+--------+--------+
| 2017 | teamC | equipA |   41   |
+------+-------+--------+--------+
...

我想要的是这个:

+-------+--------+--------+
| team  | equip  | result |
+-------+--------+--------+
| teamB | equipA |   41   |
+-------+--------+--------+
| teamC | equipA |   41   |
+-------+--------+--------+
...

我想获取 3 年(2015~2017)具有相同数据的列

我该怎么做?

【问题讨论】:

  • 做一个 GROUP BY,使用 HAVING 确保所有 3 年都在那里。
  • 如果我将 2015 年设置为开始年份并将 2017 年设置为结束年份,我必须得到具有相同数据 5 年的列 我已经计算了 3 次,并且总是结果是 3 年,而不是 5 年......

标签: mysql sql mariadb


【解决方案1】:

我会在这里使用聚合方法:

SELECT team, equip, MIN(result) AS result
FROM yourTable
WHERE year BETWEEN 2015 AND 2017
GROUP BY team, equip
HAVING MIN(result) = MAX(result) AND MIN(result) = 41;

如果可能有团队/装备对可能在所有 3 年内都没有数据,请使用此 HAVING 子句:

HAVING MIN(result) = MAX(result) AND MIN(result) = 41 AND
       COUNT(DISTINCT year) = 3

【讨论】:

  • 看来WHERE .. AND result = 41就够了。
【解决方案2】:

做一个GROUP BY。使用HAVING 确保结果在所有 3 年内都相同。

SELECT team, equip, result
FROM tablename
WHERE year BETWEEN 2015 AND 2017
GROUP BY team, equip, result
HAVING count(distinct year) = 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2015-09-15
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2013-12-13
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多