使用月份和年份查找范围数据

时间:2017-03-21 11:53:49

标签: sql postgresql

我有以下属性的表

lat, lng, month, y1, y2, y3, y4, y5... till y10.

这里y1 = 2001年的数据,y2 = 2002年的数据同样适用于剩余的数据。

我需要从month1和y1到month2到y2获取数据, 例如:从月份:3月,年份= 2001年到月份:2004年8月 是否可以使用BETWEEN函数获取数据? 如何在此场景中编写查询?任何帮助都会很明显!

1 个答案:

答案 0 :(得分:2)

你有一个糟糕,糟糕,糟糕的数据格式。这很明显,因为您的数据遍布列。数据应如下所示:

month, year, lat, lng, y

因此,一行应为10.您可以在Postgres中执行此操作:

select t.month, u.ord + 2000 as year, t.lat t.lng, u.y
from t, lateral
     unnest(array[y1, y2, . . .]) with ordinality u(y, ord)

接下来,您可以将年/月转换为日期:

select to_date(u.ord + 2000 || '-' || t.month || '-01', 'YYYY-MM-DD') as yyyymmdd, t.lat t.lng, u.y
from t, lateral
     unnest(array[y1, y2, . . .]) with ordinality u(y, ord);

现在您可以将其用作子查询并使用between

select t.*
from (select to_date(u.ord + 2000 || '-' || t.month || '-01', 'YYYY-MM-DD') as yyyymmdd, t.lat t.lng, u.y
      from t, lateral
           unnest(array[y1, y2, . . .]) with ordinality u(y, ord)
     ) t
where yyyymmdd between '2003-04-01'::timestamp and '2005-06-01'::timestamp