Want to select only 2 latest records from orders table, where count of AGENT_CODE is less than 3,
Guide me to do this in efficient way, I don’t want to go through all the records whenever this query runs.
My SQL query is something like this but does not work
SELECT ORD_NUM, ORD_DATE
FROM ORDERS
WHERE ADVANCE_AMOUNT>50
AND ( SELECT ORD_DATE, COUNT( AGENT_CODE )
FROM ORDERS
HAVING COUNT( AGENT_CODE ) < 3
ORDER BY ORD_DATE DESC LIMIT 5;)
ORDER BY ORD_DATE DESC LIMIT 2;
My ORDERS table is
CREATE TABLE `orders` (
`ORD_NUM` int(11) NOT NULL,
`ADVANCE_AMOUNT` int(11) NOT NULL,
`ORD_DATE` date NOT NULL,
`CUST_CODE` varchar(10) NOT NULL,
`AGENT_CODE` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `orders` (`ORD_NUM`, `ADVANCE_AMOUNT`, `ORD_DATE`, `CUST_CODE`, `AGENT_CODE`) VALUES
(1, 3500, '2017-08-15', 'C00002', 'A08'),
(2, 2500, '2017-09-16', 'C00003', 'A08'),
(3, 500, '2017-07-20', 'C00023', 'A08'),
(4, 4000, '2017-09-16', 'C00007', 'A10'),
(5, 1500, '2017-09-23', 'C00008', 'A04'),
(6, 2500, '2017-07-30', 'C00025', 'A10'),
(7, 4000, '2017-02-15', 'C00008', 'A11'),
(8, 1500, '2017-05-15', 'C00021', 'A11'),
(9, 2500, '2017-12-18', 'C00025', 'A11');
My intention is to select these
ORD_NUM ORD_DATE
---------- ---------
5 2017-09-23
4 2017-09-16