Tôi muốn tạo truy vấn này trong sqlalchemy. Bảng 'demande' tồn tại trong cơ sở dữ liệu. Có một truy vấn phụ tạo ra các dấu thời gian với hàm generate_series.Cách tạo truy vấn này trong sqlalchemy?
SELECT
timesteps.timestep AS timestep, d.count AS count
FROM
(SELECT
DATE_TRUNC('hour',date_demande) AS timestep,
COUNT(id) AS count
FROM
demande
GROUP BY
timestep
) AS d
RIGHT OUTER JOIN
(SELECT
timestep
FROM
generate_series('2010-01-01 00:00:00'::timestamp,
'2010-01-01 23:59:59'::timestamp,
'1 hour'::interval) AS timestep
) AS timesteps
ON d.timestep = timesteps.timestep
ORDER BY timestep;
Tôi đã thử điều này:
stmt = session.query(
func.
generate_series(
datetime.datetime(2010,1,1,0,0,0),
datetime.datetime(2010,1,1,23,59,59),
cast('1 hour',Interval())).
label('timestep')
).subquery()
print stmt
q = session.query(
stmt.c.timestep,
func.count(Demande.id)).
outerjoin((Demande, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)
print q
Nhưng nó than phiền với một InvalidRequesError: Không thể tìm thấy một mệnh đề FROM tham gia từ. Tôi đoán điều này là do truy vấn phụ.
Nếu tôi cố gắng để "đảo ngược" truy vấn, nó hoạt động nhưng nó có một 'nối ngoài bên trái':
q = session.query(
func.count(Demande.id),
stmt.c.timestep).
outerjoin((stmt, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)
Vì không có RIGHT OUTER JOIN trong SQLAlchemy, tôi chỉ muốn tìm cách để truy vấn con dưới dạng bảng đầu tiên và bảng 'demande' làm bảng thứ hai. Bằng cách này tôi sẽ có thể sử dụng LEFT OUTER JOIN
tôi phải cố gắng ngày mai này tại nơi làm việc, cảm ơn cho câu trả lời của bạn, nó có vẻ tốt đẹp –
OK, bạn đã học được tôi một cái gì đó nhưng tôi vẫn cần phải làm việc trên nó để đạt được những gì tôi đang tìm kiếm. Dù sao cũng cảm ơn bạn –