Как сделать запрос к базе данных, чтобы получить список, где каждое значение является суммой количества записей с одинаковым значением даты? - PullRequest
1 голос
/ 10 июня 2019

Я выполняю запрос к базе данных SQLite, используя SQLAlchemy. Я делаю соединение за четырьмя столами. Одним из полей в одной из таблиц является поле даты и времени. Я могу получить список кортежей со всеми записями, которые соответствуют критериям, которые я ищу. Я хочу получить список, содержащий суммы записей с той же датой. Поэтому, если бы у меня была 1 запись с определенным временем, 3 записи с одинаковым временем, но отличающиеся от первой, я получил бы список [1, 3].

Вот мой текущий запрос:

rework_records = DB.session.query(ReworkRecord, NonConformanceRecord, Part, Product).join(
        NonConformanceRecord, NonConformanceRecord.id == ReworkRecord.nonconformance_id
        ).join(
            Part
            ).join(
                Product
                ).filter(
                    Product.id == form.product_family.data).order_by(
                        desc(NonConformanceRecord.entry_date)
                        ).all()

Возвращает список кортежей с каждой записью, имеющей записи из каждой из четырех таблиц, к которым присоединяются.

1 Ответ

0 голосов
/ 10 июня 2019

Вы пропускаете только оператор GROUP BY.Выражение COUNT(*) предоставит количество записей с заданной датой entry_date.

rework_records = DB.session.from_statement('''SELECT NonConformanceRecord.entry_date, COUNT(*) 
FROM ReworkRecord 
JOIN NonConformanceRecord ON NonConformanceRecord.id == ReworkRecord.nonconformance_id 
JOIN Part
JOIN Product
WHERE Product.id == form.product_family.data
GROUP BY NonConformanceRecord.entry_date
ORDER BY NonConformanceRecord.entry_date DESC''')

Я не слишком знаком с тем, как вы это написали, но я думаю, что это будет просто:

rework_records = DB.session.query(NonConformanceRecord.entry_date, COUNT(*)).join(
        NonConformanceRecord, NonConformanceRecord.id == ReworkRecord.nonconformance_id
        ).join(
            Part
            ).join(
                Product
                ).filter(
                    Product.id == form.product_family.data).group_by(
                        NonConformanceRecord.entry_date).order_by(
                            desc(NonConformanceRecord.entry_date)
                        ).all()

Верхний должен делать то же самое в том случае, если эта вторая часть не работает.Тем не менее, я не знаю, откуда вы взяли form.product_family.data, поскольку вы не присоединяетесь к таблице с именем form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...