Я нашел несколько примеров, показывающих, как выбрать одну самую старую/новейшую строку из сгруппированного набора, но мне трудно получить самые старые две строки из набора данных.Выберите самые старые две записи из группы
Вот мой пример таблицы:
CREATE TABLE IF NOT EXISTS `orderTable` (
`customer_id` varchar(10) NOT NULL,
`order_id` varchar(4) NOT NULL,
`date_added` date NOT NULL,
PRIMARY KEY (`customer_id`,`order_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `orderTable` (`customer_id`, `order_id`, `date_added`) VALUES
('1234', '5A', '1997-01-22'),
('1234', '88B', '1992-05-09'),
('0487', 'F9', '2002-01-23'),
('5799', 'A12F', '2007-01-23'),
('1234', '3A', '2009-01-22'),
('3333', '7FHS', '2009-01-22'),
('0487', 'Z33', '2004-06-23'),
('3333', 'FF44', '2013-09-11'),
('3333', '44f5', '2013-09-02');
Этот запрос возвращает более двух строк:
SELECT customer_id, order_id, date_added
FROM orderTable T1
WHERE (
select count(*) FROM orderTable T2
where T2.order_id = T1.order_id AND T2.date_added <= T1.date_added
) <= 2;
Поскольку я не ищу для одной строки, это не стандартный запрос greatest-n-per-group
типа.
Что мне не хватает, что я могу получить первые два заказа для каждого customer_id?
Вы имеете в виду LIMIT 2 и не <= 2? – SenorAmor
'для каждого клиента'. Ограничение до 2 для всего запроса не вернет результаты, которые мне нужны. –
@acoder, проверьте мой ответ ниже, вы хотите получить два первых клиента, но вы подсчитываете строки в order_id, которые возвращают 1 для каждой строки. –