我正在尝试使用SQLAlchemy编写这样的查询:
SELECT
hour,
avg(value)
from
generate_series('2019-10-01T00:00:00'::timestamp, '2019-10-01T23:00:00'::timestamp, '0 days 3600.000000 seconds'::interval) AS hour
left outer join
(
select
*
from
data
where
parent_id=10 and
date_time >= '2019-10-01T00:00:00'::timestamp and
date_time < '2019-10-02T00:00:00'::timestamp
) "inn" on date_trunc('hour', inn.date_time) = hour
group by
hour
order by
hour;
我的数据表有3列,parent_id,date_time和value。
我已经花了几个小时,无法让它完全像上面那样工作。
我最接近(至少在语义上有意义)的是:
series = func.generate_series(
start_date,
end_date,
datetime.timedelta(hours=1)
).label('hour')
subquery = (
session
.query(data)
.filter(data.parent_id == parent_id)
.filter(data.date_time >= start_date)
.filter(data.date_time < end_date)
.subquery()
)
query = (
session
.query(
series
)
.outerjoin(
subquery,
func.date_trunc('hour', subquery.c.reading_date_time) == series
)
)
但是它不起作用,不可能像这样引用“小时”列,我得到的错误是Don't know how to join to SELECT
(我跳过了分组依据的代码,因为在这里这不是问题)
答案 0 :(得分:6)
按照Ilja的提示,我开始使用它了:
const arr = ['first string', 'second string'];
const res = Object.assign({}, ...arr.map((s) => ({[s]: 'found'})));
console.log(res);