如何将子查询结果联接到函数结果

时间:2019-11-07 09:34:59

标签: python sqlalchemy

我正在尝试使用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(我跳过了分组依据的代码,因为在这里这不是问题)

1 个答案:

答案 0 :(得分:6)

按照Ilja的提示,我开始使用它了:

const arr = ['first string', 'second string'];
const res = Object.assign({}, ...arr.map((s) => ({[s]: 'found'})));

console.log(res);