SQL查询和过滤数据

时间:2015-06-29 09:25:56

标签: sql sqlite greatest-n-per-group timezonedb

我正在使用时区数据库(https://timezonedb.com/download),我正在努力处理SQL查询。

时区的有效性取决于数据库中的time_start字段。这对于获得正确的time_start很重要。

以下是数据

zone_id|zone_name          |time_start
391    |America/Los_Angeles|2147397247
391    |America/Los_Angeles|1425808800
391    |America/Los_Angeles|2140678800
391    |America/Los_Angeles|9972000

392    |America/Metlakatla |2147397247
392    |America/Metlakatla |436352400
392    |America/Metlakatla |9972000

393    |America/Anchorage  |2147397247
393    |America/Anchorage  |2140682400
393    |America/Anchorage  |2120122800
393    |America/Anchorage  |1425812400
393    |America/Anchorage  |9979200

以下示例显示如何使用区域名称America/Los_Angeles查询时区信息。

SELECT * FROM timezone 
WHERE time_start < strftime('%s', 'now')
AND zone_name='America/Los_Angeles'
ORDER BY time_start DESC LIMIT 1;

此查询返回

391|America/Los_Angeles|1425808800

我想对所有带有一个SQL查询的zone_id做同样的事情。

预期结果

391|America/Los_Angeles|1425808800
392|America/Metlakatla |436352400
393|America/Anchorage  |1425812400

SQL Fiddle

1 个答案:

答案 0 :(得分:1)

我猜你正在寻找这样的东西:

select tz.zone_id
     , tz.zone_name
     , max(tz.time_start)
from timezone tz 
where tz.time_start < strftime('%s', 'now')
group by tz.zone_id
       , tz.zone_name
order by tz.zone_id;

SQLFiddle