我有以下属性的表
lat, lng, month, y1, y2, y3, y4, y5... till y10.
这里y1 = 2001年的数据,y2 = 2002年的数据同样适用于剩余的数据。
我需要从month1和y1到month2到y2获取数据, 例如:从月份:3月,年份= 2001年到月份:2004年8月 是否可以使用BETWEEN函数获取数据? 如何在此场景中编写查询?任何帮助都会很明显!
答案 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