Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLZoo白色圣诞自加入日期_Sql - Fatal编程技术网

SQLZoo白色圣诞自加入日期

SQLZoo白色圣诞自加入日期,sql,Sql,假设我们有一个名为hadcet的数据集,该数据集具有以下格式的历史温度数据: +------+----+------+------+------+------+------+------+------+------+------+------+------+------+ | yr | dy | m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 | m9 | m10 | m11 | m12 | +------+----+--

假设我们有一个名为hadcet的数据集,该数据集具有以下格式的历史温度数据:

+------+----+------+------+------+------+------+------+------+------+------+------+------+------+
| yr   | dy | m1   | m2   | m3   | m4   | m5   | m6   | m7   | m8   | m9   | m10  | m11  | m12  |
+------+----+------+------+------+------+------+------+------+------+------+------+------+------+
| 2001 |  1 |   40 |   11 |    9 |  112 |   87 |  131 |  185 |  180 |  150 |  151 |   91 |   98 |
| 2001 |  2 |   77 |   32 |   -4 |  114 |   99 |  126 |  207 |  163 |  168 |  143 |   99 |   29 |
| 2001 |  3 |   52 |   66 |   -3 |   84 |  105 |  100 |  209 |  166 |  153 |  142 |   87 |   55 |
| 2001 |  4 |   50 |   57 |    5 |   69 |   72 |  130 |  219 |  151 |  134 |  139 |   90 |   73 |
| 2001 |  5 |   47 |   68 |   12 |   71 |   82 |  136 |  217 |  161 |  139 |  159 |   75 |   82 |
| 2001 |  6 |   43 |   83 |   57 |   90 |   76 |  135 |  201 |  173 |  141 |  142 |   95 |   46 |
| 2001 |  7 |   49 |   85 |   86 |   69 |   90 |  110 |  185 |  161 |  153 |  128 |  112 |   62 |
以此类推,从1772年到2017年的所有日子、月份和年份

让我们把白色圣诞节定义为12月25日的温度低于零

写一个查询,显示一个人在童年每出生一年会经历多少次白色圣诞节。我们将童年定义为3岁到12岁(包括3岁到12岁),假设他们出生在年初,第一个圣诞节时大约1岁。仅显示当年出生的孩子会经历7个或更多白人圣诞节的年份

我编写了以下查询:

SELECT 
    a.yr, 
    COUNT(DISTINCT b.yr) AS wcc
FROM 
    hadcet a
    JOIN hadcet b ON b.yr > a.yr + 2 AND b.yr < a.yr +11
WHERE b.m12 < 0 AND b.dy = 25 
GROUP BY a.yr 
HAVING wcc >= 7 

但是,查询不会在出现此问题4的网页上运行。这是问题的有效解决方案吗?

这里有一个被SQLZoo标记为正确答案的解决方案:

SELECT 
    x.yr,
    COUNT(y.yr) wcc
FROM (
    SELECT DISTINCT yr FROM hadcet
) x
LEFT JOIN (
   SELECT yr FROM hadcet WHERE dy >= 21 AND dy <= 25 GROUP BY yr HAVING SUM(m12 < 0) > 0
) y ON y.yr >= x.yr + 2 AND y.yr <= x.yr + 11
GROUP BY x.yr
HAVING COUNT(y.yr) >= 7
该查询使用两个子查询:

x列出了不同的年份 y仅选择白色圣诞节年份 然后外部查询使用子查询逻辑连接子查询

注:你在文章中给出的白色圣诞节的定义与SQLZoo上的定义不一致:如果在12月21日至25日之间有一天平均气温低于零度,我们就宣布为白色圣诞节。您需要使用该规则来获得预期的结果