Запрос в БД postgresql15 на С#10 (.Net 6)+EF и выгрузка в xls

2 000 руб. за проект
05 февраля 2023, 17:02 • 8 откликов • 63 просмотра
Имеем в postgresql15 базу db1
В ней таблица public."MARKER_LIFECOUNT"
id bigint NOT NULL DEFAULT nextval('"MARKER_LIFECOUNT_id_seq"'::regclass),
printer_id bigint NOT NULL,
business_point_id integer NOT NULL,
report_date timestamp without time zone,
total_page_count numeric(10,0),

, которая содержит данные, например:
id;printer_id;business_point_id;report_date;total_page_count
1;1;1;2023-01-01 8:00:42;1000
2;2;2;2023-01-01 8:03:42;1005
3;1;1;2023-01-01 19:03:42;1008
4;2;2;2023-01-01 19:03:42;1009
5;1;1;2023-01-02 8:00:42;1010
6;2;2;2023-01-02 8:03:42;1015
7;1;1;2023-01-02 19:03:42;1018
8;2;2;2023-01-02 19:03:42;1019
9;1;1;2023-01-30 8:00:42;1
10;2;2;2023-01-30 8:03:42;1045
11;1;1;2023-01-30 19:03:42;1048
12;2;2;2023-01-30 19:03:42;1049
13;1;1;2023-02-01 8:00:42;5
14;2;2;2023-02-01 8:03:42;1055
15;1;1;2023-02-01 18:00:42;9
16;2;2;2023-02-01 18:03:42;1059

total_page_count - это данные счетчика оттисков принтера printer_id.

Задача:
Сформировать отчет по кол-ву отпечатанных страниц за предыдущий месяц для каждого printer_id и сохранить в xls. Для каждого business_point_id свой файл отчета
В качестве начала периода брать первый день предыдущего месяца (самую раннюю запись за этот день), а в качестве конца периода - первый день текущего месяца (самую раннюю запись за этот день).
На примере данных из таблицы выше, для printer_id=1 это будет 1;1;1;2023-01-01 8:00:42;1000 ->13;1;1;2023-02-01 8:00:42;5
Необходимо учесть, что счетчик оттисков может сбрасываться самопроизвольно на 0 или на меньшее чем предыдущее значение, т.е. нельзя просто взять разность последнего и первого значения total_page_count за период.

Написать проект на С#10 (.Net 6), БД postgresql15 с использованием Entity Framework Core for PostgreSQL на visual studio 2022. Результат представить в виде исходника проекта.
Использовать только библиотеки open source