【问题标题】:SQLite, sliding to get results based on value and dateSQLite,根据值和日期滑动获取结果
【发布时间】:2014-08-11 13:29:10
【问题描述】:

这个问题发布在这个thread.的建议上

我正在使用 SQLite/数据库浏览器,我的数据如下所示:

data.csv
company  year  value
A        2000  15
A        2001  12
A        2002  20
B        2000  25
B        2001  20
B        2002  10
C        2000  18
C        2001  14
C        2002  22
etc..............

我想要做的是获取数据集中所有年份的值

result.csv
company    year   value
A          2000   15
A          2001   12
A          2002   20

因此排除公司 C,因为 2002 年的价值 > 20 和公司 B,因为价值 > 20 在 2000 年。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    您想要所有最大值不超过 20 的公司:

    SELECT *
    FROM Data
    WHERE company IN (SELECT company
                      FROM Data
                      GROUP BY company
                      HAVING max(value) <= 20)
    

    【讨论】:

    • 为答案干杯,但请重新阅读发布的问题。我想要过去 X 年总价值从未超过 20 的公司。对于上面我也可以使用 SELECT * FROM data WHERE value
    • 您是对的,您可以选择在内部查询中使用 where 子句来过滤年份。
    • @user3471881:不,max 阻止了这种情况。它永远不会有一行 >= 20。
    • @user3471881 要理解它,请尝试单独执行内部查询。
    • @user3471881 查找 GROUP BY 和 HAVING。
    【解决方案2】:

    不确定是否有更好的解决方案,但我认为这会起作用:

    select company
    ,      sum(case when value < 20 then 1 else 0 end) s
    ,      count(*) c
    from   data
    where  year in (2000, 2001, 2002)
    group
    by     company
    having s = c
    

    它将检查计数是否等于该值小于20的年数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-17
      • 2018-09-26
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多