【问题标题】:Finding range data using month and year使用月份和年份查找范围数据
【发布时间】:2017-08-13 01:49:31
【问题描述】:

我有以下属性的表格

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

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

我需要从month1和y1获取数据到month2到y2, 例如:从月份:3 月,年份 = 2001 到月份:8 月,2004 年 是否可以使用 BETWEEN 函数获取数据? 我怎样才能写一个查询到这个场景?任何帮助都将不胜感激!

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 以及格式化文本。并向我们​​展示您当前的查询尝试。

标签: sql postgresql


【解决方案1】:

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

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

【讨论】:

  • 谢谢你的回答,我知道数据格式不好,还是谢谢你的帮助。
猜你喜欢
  • 2023-03-23
  • 2023-04-04
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多