Hallo liebe Community,
ich nutze schon eine Weile die WINDOW-Functions in MySQL (MariaDB 10.3), diese lassen sich aber leider nicht in der WHERE Clause verwenden. Daher meine Hoffnung, dass sich einer von euch schon mal mit einem ähnlichen Case beschäftigt hat und einen guten Lösungsweg kennt.
Ich habe die beiden Tabellen:
Der
Ich möchte jetzt die
Das gewünschte Ergebnis in diesem Beispiel wäre dann die contract_id
Könnt ihr mir hier weiterhelfen?
Beste Grüße,
canju
ich nutze schon eine Weile die WINDOW-Functions in MySQL (MariaDB 10.3), diese lassen sich aber leider nicht in der WHERE Clause verwenden. Daher meine Hoffnung, dass sich einer von euch schon mal mit einem ähnlichen Case beschäftigt hat und einen guten Lösungsweg kennt.
Ich habe die beiden Tabellen:
user
und contracts
user
:
Code:
user_id |created |
------------------------------------+-----------------------+
05159679-3d96-11ed-9bcc-80e82cdc1447|2022-09-08 20:10:00.000|
SQL:
CREATE TABLE IF NOT EXISTS `user` (
`user_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created` datetime DEFAULT NULL,
`last_positive_contract_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`last_positive_contract_created` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `user` (`user_id`, `created`, `last_positive_contract_id`, `last_positive_contract_created`) VALUES
('05159679-3d96-11ed-9bcc-80e82cdc1447', '2022-09-08 20:10:00', '358e9fa1-3d96-11ed-9bcc-80e82cdc1447', '2011-04-07 20:32:51');
contracts
:
Code:
contract_id |user_id |status |created |
------------------------------------+------------------------------------+-------------------+-----------------------+
2813ab8d-3d96-11ed-9bcc-80e82cdc1447|05159679-3d96-11ed-9bcc-80e82cdc1447|COMPLETED |2010-09-06 17:40:10.000|
358e9fa1-3d96-11ed-9bcc-80e82cdc1447|05159679-3d96-11ed-9bcc-80e82cdc1447|COMPLETED |2011-04-07 20:32:51.000|
8088d0d8-4b98-11ed-8de2-5c3a456597bc|05159679-3d96-11ed-9bcc-80e82cdc1447|CANCELLED |2011-12-04 14:23:14.000|
4693a45d-3d96-11ed-9bcc-80e82cdc1447|05159679-3d96-11ed-9bcc-80e82cdc1447|WAITING_FOR_PAYMENT|2022-01-15 09:50:23.000|
SQL:
CREATE TABLE IF NOT EXISTS `contracts` (
`contract_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`user_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`status` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `contracts` (`contract_id`, `user_id`, `status`, `created`) VALUES
('2813ab8d-3d96-11ed-9bcc-80e82cdc1447', '05159679-3d96-11ed-9bcc-80e82cdc1447', 'COMPLETED', '2010-09-06 17:40:10'),
('358e9fa1-3d96-11ed-9bcc-80e82cdc1447', '05159679-3d96-11ed-9bcc-80e82cdc1447', 'COMPLETED', '2011-04-07 20:32:51'),
('4693a45d-3d96-11ed-9bcc-80e82cdc1447', '05159679-3d96-11ed-9bcc-80e82cdc1447', 'WAITING_FOR_PAYMENT', '2022-01-15 09:50:23'),
('8088d0d8-4b98-11ed-8de2-5c3a456597bc', '05159679-3d96-11ed-9bcc-80e82cdc1447', 'CANCELLED', '2011-12-04 14:23:14');
Der
status
"COMPLETED" eines Vertags ist hierbei der letztmögliche (positive) Status der zu einem Vertrag erreicht werden kann.Ich möchte jetzt die
contract_id
und das created
Datum des jeweils zuletzt erstellten positiven Vertrags mit dem Status "COMPLETED" zu jedem eintrag in der user
Tabelle als eigenes Feld (last_positive_contract_id
und last_positive_contract_created
) ausgeben lassen.Das gewünschte Ergebnis in diesem Beispiel wäre dann die contract_id
358e9fa1-3d96-11ed-9bcc-80e82cdc1447
und das created 2011-04-07 20:32:51.000
:
Code:
user_id |created |last_positive_contract_id |last_positive_contract_created|
------------------------------------+-----------------------+------------------------------------+------------------------------+
05159679-3d96-11ed-9bcc-80e82cdc1447|2022-09-08 20:10:00.000|358e9fa1-3d96-11ed-9bcc-80e82cdc1447| 2011-04-07 20:32:51.000|
Könnt ihr mir hier weiterhelfen?
Beste Grüße,
canju