【问题标题】:Compare results from last year and this year比较去年和今年的结果
【发布时间】:2017-08-14 08:54:03
【问题描述】:

我需要查询方面的帮助。 我的结果集如下所示:

表结构:

 GEO | YEAR | INS
 ---------------------------
 Ams | 2016 | something wrong1
 Ams | 2016 | something wrong2
 Ams | 2017 | something wrong1

如果在 2016 年 GEO 'AMS' 出现“有问题1”,而在 2017 年我们再次出现相同 Geo 'AMS' 的“有问题1”,我需要得到一个结果集。 给我看 Geo 'AMS'

本质上我需要比较 2016 年的结果集和 2017 年的结果集。 如果对于相同的 Geo,我们在 2016 年和 2017 年有相同的缺失,则查询需要向我显示该 GEO。

任何帮助将不胜感激

到目前为止我得到的查询:

select Geo
from (
    select Geo
    from dbo.results
    WHERE (INS in ('something wrong1', 'something wrong2'))
) as res 
Group by Geo
having count(*) > 1

但这仅向我显示双倍的地理,它不查看 INS 列。

【问题讨论】:

  • 请以格式化文本形式的示例表数据和预期结果!同时向我们展示您当前的查询尝试。
  • 您使用的是哪个数据库?
  • @jarlh 你能帮我怎么做吗?
  • @Prathyush 我正在使用 SQL
  • 你的意思是 SQL Server 2008 还是 2012?

标签: sql sql-server-2012


【解决方案1】:

您应该能够通过 selfjoin 执行此操作,例如:

SELECT Geo
  FROM dbo.results t1
  JOIN dbo.results t2
    ON t1.GEO = t2.GEO
   AND t1.INS = t2.INS
   AND t1.YEAR <> t2.YEAR
 GROUP BY Geo

【讨论】:

  • 据我所知,这个查询成功了!感谢 RealCheeseLord!
【解决方案2】:

您可以使用聚合来做到这一点:

select Geo
from dbo.results
where ins = 'something wrong1' and
      year in (2016, 2017)
group by Geo
having count(distinct year) = 2;

我不确定'something wrong2' 与这个问题有什么关系。

如果你只是想要两年内相同的ins,你可以这样做:

select Geo, ins
from dbo.results
where year in (2016, 2017)
group by Geo, ins
having count(distinct year) = 2;

这将返回 Geoins

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2016-11-08
    相关资源
    最近更新 更多