#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть этот набор данных:
CREATE TABLE my_table
(
the_debt_id varchar(6) NOT NULL,
the_debt_pay_id varchar(8) NOT NULL,
the_debt_due date NOT NULL,
the_debt_paid timestamp NOT NULL
)
INSERT INTO my_table
VALUES ('LMUS01', 'LMUS0100', '2020-03-02', '2020-03-01 06:59:32'),
('LMUS01', 'LMUS0101', '2020-04-02', '2020-04-01 06:29:53'),
('LMUS01', 'LMUS0102', '2020-05-02', '2020-04-01 02:28:41'),
('LMUS01', 'LMUS0103', '2020-06-02', '2020-05-18 11:17:20'),
('LMUS01', 'LMUS0104', '2020-07-02', '2020-05-18 11:07:01'),
('LMUS01', 'LMUS0105', '2020-08-02', '2020-08-02 11:22:04'),
('LMUS02', 'LMUS0200', '2020-01-02', '2020-01-03 09:34:20'),
('LMUS02', 'LMUS0201', '2020-02-02', '2020-01-31 06:58:18'),
('LMUS02', 'LMUS0202', '2020-03-02', '2020-03-02 07:30:59')
Как я могу фильтровать по элементу (скажем, LMUS0103 и LMUS0202) внутри группы? Например, я хочу, чтобы все записи были равны или меньше максимального the_debt_due
значения в группе, в которую попадает элемент. Группа — это комбинация the_debt_id
и даты the_debt_paid
. Это ожидаемый результат:
the_debt_id the_debt_pay_id the_debt_due
LMUS01 LMUS0100 2020-03-02 ---> LMUS01amp;2020-03-01 group1
LMUS01 LMUS0101 2020-04-02 ---> LMUS01amp;2020-04-01 group2
LMUS01 LMUS0102 2020-05-02 ---> LMUS01amp;2020-04-01 group2
LMUS01 LMUS0103 2020-06-02 ---> LMUS01amp;2020-05-18 group3
LMUS01 LMUS0104 2020-07-02 ---> LMUS01amp;2020-05-18 group3 max date of group
LMUS02 LMUS0200 2020-01-02 ---> LMUS02amp;2020-01-03 group1
LMUS02 LMUS0201 2020-02-02 ---> LMUS02amp;2020-01-31 group2
LMUS02 LMUS0202 2020-03-02 ---> LMUS02amp;2020-03-02 group3 max date of group
Я должен сгруппировать по the_debt_id
и the_debt_paid::date
для the_debt_pay_id IN ('LMUS0103','LMUS0202')
, но я не могу понять, как получить максимальное значение этой группы. Заранее спасибо за помощь.
Комментарии:
1. «Меньше или равно максимальному» описывает все не
NULL
значения.2. Привет @Gordon Linoff, меньше или равно максимальному значению в группе, куда попадает элемент. Например, для LMUS0103 он принадлежит к группе 3, максимальный
the_debt_due
элемент в этой группе равен 2020-07-02, поэтому все элементы равны или меньше 2020-07-02, так что это исключает строку, в которой находится LMUS0105.