Количество сущностей на последний день месяца в PostgreSQL

Что имеем изначально:

1. Есть таблица Метод эксплуатации(method_exploit), в котором хранится список определённых способов эксплуатации:

Id title code
1 Метод 1 method1
2 Метод 2 method2
3 Метод 3 method3
4 Метод 4 method4
5 Метод 5 method5
6 Метод 6 method6
7 Метод 7 method7

2. Также ещё есть и таблица Журнал эксплуатации(journal), которая имеет следующий вид:

Id entity_id date method_id
1 1 2021-09-28 12:00:00 2
2 1 2021-09-28 13:10:00 1
3 1 2021-09-30 14:10:00 2
4 2 2021-09-24 14:10:00 1
5 2 2021-09-25 15:10:00 3
6 3 2021-09-27 15:10:00 7
7 3 2021-09-28 15:10:00 1

То есть в этой таблице у нас находится журнал, в котором отмечается какой метод эксплуатации(method_id) был у той или иной сущности с идентификатором entity_id, начиная с определённого момента(date).

3. Что требуется: написать хранимую функцию, которая на вход принимает 1 параметр:

  • дату, то есть ПОСЛЕДНИЙ ДЕНЬ определённого месяца;

функция должна найти КОЛИЧЕСТВО СУЩНОСТЕЙ, у которых на ПОСЛЕДНИЙ ДЕНЬ определённого месяца переданного в качестве параметра значение способа эксплуатации равно 1 или 2. То есть method_id = 1 или method_id = 2.

В приведённом выше примере НА ПОСЛЕДНИЙ ДЕНЬ СЕНТЯБРЯ количество таких сущностей будет равняться 2. Это сущности с entity_id = 1 и entity_id = 3. Так как у entity_id = 1 последнее значение метода эксплуатации за дату '2021-09-30 14:10:00' то есть самую последнюю дату для этой сущности в сентябре равно 2. У entity_id = 3 последнее значение метода эксплуатации за дату '2021-09-28 15:10:00' то есть самую последнюю дату для этой сущности в сентябре равно 1. А вот у entity_id = 2 последнее значение метода эксплуатации за дату '2021-09-25 15:10:00' то есть самую последнюю дату для этой сущности в сентябре равно 3, поэтому сущность с entity_id = 2 не подходит под условие.

В итоге количество сущностей, удовлетворяющих условию поиска = 2.

Ответ можно найти на Stackoverflow

Тэги:

Тэг в списке: