根据不同的日期在多列上返回计数结果

时间:2015-02-02 20:51:22

标签: sql postgresql

我有这个包含大量数据的表。我想根据48小时内和30天内的数据提取不同的结果计数(用于比较)

Fog||Count48hr(fog)||Count30day(fog)||Snow||Count48hr(snow)||Count30day(snow)
LA01    1123            3000           NWC        54               109
SIU     3665            7000           SIS        21                64
CHARTN  444             1500           PHS        39                120

注意:每个计数都是48小时或30天内每个计数的出现次数

1 个答案:

答案 0 :(得分:0)

如果您愿意使用两个单独的查询(一个用于雾,一个用于雪),则可以对数据执行条件求和,只有arrival_time符合所需条件才会增加计数。< / p>

-- Fog
SELECT
  fog,
  SUM(CASE WHEN NOW() - arrival_time < INTERVAL '48 HOURS' THEN 1 ELSE 0 END)
    AS count48hr_fog,
  SUM(CASE WHEN NOW() - arrival_time BETWEEN INTERVAL '48 HOURS' AND
    INTERVAL '30 DAYS' THEN 1 ELSE 0 END) AS count30day_fog
FROM your_table
GROUP BY fog;

然后你可以再做同样的事情,取代&#34;雾&#34;带有&#34; snow&#34;的列列(也可能重命名输出列)。

这假设在您的计数中您独立地看着雪和雾 - 如果由于某种原因您实际上计算了雪和雾类型的配对(例如,LA01在过去48小时内与NWC一起出现的次数) ,然后你可以合并这个查询:

SELECT
  fog,
  snow,
  SUM(CASE WHEN NOW() - arrival_time < INTERVAL '48 HOURS' THEN 1 ELSE 0 END)
    AS count48hr,
  SUM(CASE WHEN NOW() - arrival_time BETWEEN INTERVAL '48 HOURS' AND
    INTERVAL '30 DAYS' THEN 1 ELSE 0 END) AS count30day
FROM your_table
GROUP BY fog, snow;

但是,您发布的内容暗示这不是您所寻找的内容 - 我已将其包含在内,以防您出现用例。