Last active
August 29, 2015 14:05
-
-
Save webdevilopers/3a82175f6f4743e707b0 to your computer and use it in GitHub Desktop.
MySQL - Join row to get latest change in one single row
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- | |
-- Database: `webdevilopers` | |
-- | |
-- -------------------------------------------------------- | |
-- | |
-- Table structure for table `contracts` | |
-- | |
CREATE TABLE IF NOT EXISTS `contracts` ( | |
`id` int(11) NOT NULL AUTO_INCREMENT, | |
`number` int(11) NOT NULL, | |
PRIMARY KEY (`id`) | |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; | |
-- | |
-- Dumping data for table `contracts` | |
-- | |
INSERT INTO `contracts` (`id`, `number`) VALUES | |
(1, 111111), | |
(2, 222222); | |
-- -------------------------------------------------------- | |
-- | |
-- Table structure for table `contract_states` | |
-- | |
CREATE TABLE IF NOT EXISTS `contract_states` ( | |
`id` int(11) NOT NULL AUTO_INCREMENT, | |
`contract_id` int(11) NOT NULL, | |
`stateName` varchar(20) COLLATE utf8_unicode_ci NOT NULL, | |
`createdAt` datetime NOT NULL, | |
PRIMARY KEY (`id`), | |
KEY `contract_id` (`contract_id`,`createdAt`) | |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ; | |
-- | |
-- Dumping data for table `contract_states` | |
-- | |
INSERT INTO `contract_states` (`id`, `contract_id`, `stateName`, `createdAt`) VALUES | |
(1, 1, 'opened', '2014-08-01 00:00:00'), | |
(2, 1, 'pending', '2014-08-04 00:00:00'), | |
(3, 1, 'closed', '2014-08-10 00:00:00'), | |
(4, 2, 'opened', '2014-08-11 00:00:00'); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT c.id, c.number, cs.createdAt, cs.stateName | |
FROM `contracts` `c` | |
JOIN `contract_states` `cs` ON `c`.`id` = `cs`.`contract_id` | |
WHERE 1 | |
ORDER BY cs.createdAt DESC | |
/* | |
id number createdAt stateName | |
2 222222 2014-08-11 00:00:00 opened | |
1 111111 2014-08-10 00:00:00 closed | |
1 111111 2014-08-04 00:00:00 pending | |
1 111111 2014-08-01 00:00:00 opened | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT c.id, c.number, MAX(cs.createdAt), cs.stateName | |
FROM `contracts` `c` | |
JOIN `contract_states` `cs` ON `c`.`id` = `cs`.`contract_id` | |
WHERE 1 | |
GROUP BY c.id | |
/* | |
id number MAX(cs.createdAt) stateName | |
1 111111 2014-08-10 00:00:00 opened | |
2 222222 2014-08-11 00:00:00 opened | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT c.id, c.number, cs.createdAt, cs.stateName, | |
( | |
SELECT MAX(cs2.createdAt) | |
FROM `contract_states` `cs2` | |
WHERE `cs2`.`contract_id` = `c`.`id` | |
) AS lastCreatedAt | |
FROM `contracts` `c` | |
JOIN `contract_states` `cs` ON `c`.`id` = `cs`.`contract_id` | |
WHERE 1 | |
/* | |
id number createdAt stateName lastCreatedAt | |
1 111111 2014-08-01 00:00:00 opened 2014-08-10 00:00:00 | |
1 111111 2014-08-04 00:00:00 pending 2014-08-10 00:00:00 | |
1 111111 2014-08-10 00:00:00 closed 2014-08-10 00:00:00 | |
2 222222 2014-08-11 00:00:00 opened 2014-08-11 00:00:00 | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT c.id, c.number, cs.createdAt, cs.stateName, | |
( | |
SELECT MAX(cs2.createdAt) | |
FROM `contract_states` `cs2` | |
WHERE `cs2`.`contract_id` = `c`.`id` | |
) AS lastCreatedAt | |
FROM `contracts` `c` | |
JOIN `contract_states` `cs` ON `c`.`id` = `cs`.`contract_id` | |
WHERE 1 | |
HAVING cs.createdAt = lastCreatedAt | |
/* | |
id number createdAt stateName lastCreatedAt | |
1 111111 2014-08-10 00:00:00 closed 2014-08-10 00:00:00 | |
2 222222 2014-08-11 00:00:00 opened 2014-08-11 00:00:00 | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT c.id, c.number, cs.createdAt, cs.stateName | |
FROM `contracts` `c` | |
JOIN `contract_states` `cs` ON `c`.`id` = `cs`.`contract_id` | |
WHERE cs.createdAt = ( | |
SELECT MAX(cs2.createdAt) | |
FROM `contract_states` `cs2` | |
WHERE `cs2`.`contract_id` = `c`.`id` | |
) | |
/* | |
id number createdAt stateName | |
1 111111 2014-08-10 00:00:00 closed | |
2 222222 2014-08-11 00:00:00 opened | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT c.id, c.number, cs.createdAt, cs.stateName | |
FROM `contracts` `c` | |
JOIN `contract_states` `cs` ON `c`.`id` = `cs`.`contract_id` | |
WHERE 1 | |
GROUP BY c.id | |
ORDER BY MAX( cs.createdAt ) | |
/* | |
id number createdAt stateName | |
1 111111 2014-08-01 00:00:00 opened | |
2 222222 2014-08-11 00:00:00 opened | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Related issues: