Hi everyone,
I have a database of some `items` which have a range (tsarange =>
DateTimeRange) column that usually ranges in intervals of a bunch of
seconds and I basically want to create an availability statistics of those
items (based on their `lower(Item.range)`) for some period (month/day) in
some given interval (last year, last half of a year or custom).
This is obviously not a hard task to do, one just needs to extract the
month or day, that he wants and group by the extracted part, however in a
database with a ~3.10^6 rows this takes around 8-9s which is not really
good for user experience hence I came up with a bit more complicated query
which results in the same thing but taking only 800ms.
Let's say for example that we want to know how many `items` there are per
day in the whole year, the query would look followingly:
```
SELECT day.date, count(i.id)
FROM (
SELECT to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD')
AS date
FROM generate_series(0, 365, 1) AS offs
) AS day
LEFT OUTER JOIN items AS i
ON (day.date=to_char(date_trunc('day', lower(i.range)), 'YYYY-MM-DD'))
GROUP BY day.date;
```
My issue is that I am not able to reproduce this query into SQLAlchemy
query builder.
Specifically I am struggling with this part
`(current_date - offs)`
This may seem harmless at first sight rewritten in the following form
```
series = alias(func.generate_series(0, 365, 1))
subq = sess.query(func.to_char(func.date_trunc('day', (func.current_date()
- series)), 'YYYY-MM-DD')).\
select_from(series).\
subquery()
```
but SQLAlchemy is trying to cast `series` to a scalar due to the
comparison, which is obviously not possible and available thus failing and
yielding an error that `generate_series` doesn't have a `as_scalar()`
method.
Is it even possible to rewrite this query?
I hope so. I am using SQLAlchemy ORM without any additional framework.
I will appreciate any help.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.