2016-01-08 5 views
0

Моя таблица выглядит следующим образом:Выберите две строки для каждого значения

ID - USER - LOCATION 
1 - Steve - home 
2 - Steve - work 
3 - Steve - school 
4 - Eve - home 
5 - Eve - work 
6 - Eve - school 
7 - RJ - school 
etc. 

Как я могу получить от всех пользователей только две позиции?

EDIT

Вывод должен быть таким:

ID - USER - LOCATION 
1 - Steve - home 
2 - Steve - work 
4 - Eve - home 
5 - Eve - work 
7 - RJ - school 
+0

Вы должны получить только 2 строки из таблицы с помощью выбора? –

+0

Я имею в виду для каждого пользователя две строки. –

+0

Вы пробовали выбрать самостоятельно? –

ответ

2
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,USER VARCHAR(12) NOT NULL 
,LOCATION VARCHAR(12) 
); 

INSERT INTO my_table VALUES 
(1 ,'Steve','home'), 
(2 ,'Steve','work'), 
(3 ,'Steve','school'), 
(4 ,'Eve','home'), 
(5 ,'Eve','work'), 
(6 ,'Eve','school'), 
(7 ,'RJ','school'); 

т.д .:

SELECT x.* 
    FROM my_table x 
    JOIN my_table y 
    ON y.user = x.user 
    AND y.id <= x.id 
GROUP 
    BY x.id 
HAVING COUNT(*) <=2; 
+----+-------+----------+ 
| ID | USER | LOCATION | 
+----+-------+----------+ 
| 1 | Steve | home  | 
| 2 | Steve | work  | 
| 4 | Eve | home  | 
| 5 | Eve | work  | 
| 7 | RJ | school | 
+----+-------+----------+ 
+0

Вот и все! Спасибо! –

+0

Не могли бы вы рассказать мне, как я могу сортировать его по идентификатору? Я пробовал несколько способов, но он не работал. –

+0

@EroStefano 'И y.id <= x.id' <- играть с этой строкой – Strawberry

0

Что-то вроде:

SELECT a.USER 
FROM YourTable a 
WHERE LOCATION IN (
        SELECT DISTINCT(b.LOCATION) 
        FROM YourTable b 
        WHERE USER = a.USER 
        LIMIT 2 
        ) 

Или, если вы хотите 2 конкретные места:

SELECT USER 
FROM YourTable 
WHERE LOCATION = 'home' OR LOCATION = 'work' 

Edit:

кажется, что MySql (или Versione) не принимает LIMIT в подзапроса

+0

Первый запрос возвращает только пользователя, у которого есть два первых местоположения («домашний» и «рабочий»), например, RJ не возвращается. – jofel

+0

Различий не является функцией, а ограничение без ордера довольно бессмысленным – Strawberry

Смежные вопросы