2013-11-13 2 views
0

Hy, У меня есть sqllite стол похож на это:SQLite Database Query упорядоченного результата

nr. | Name 
4 | And 
1 | Osd 
6 | Edf 
7 | Osd 
6 | And 
2 | Edf 
3 | And 

Мне нужно заказывать данные по имени, так что Виль в группах, а затем заказать каждую группу, основанную на первом nr в этой группе. Таким образом, после запроса результат должен выглядеть следующим образом:

nr. | Name 
1 | Osd ->First goup, it has nr = 1 
7 | Osd 
2 | Edf ->Second goup, it has nr = 2 
6 | Edf 
3 | And ->Third goup, it has nr = 3 
4 | And 
6 | And 

ответ

2

Это будет делать:

SELECT nr, Name FROM (
    SELECT nr, Name, (
    SELECT MIN(nr) FROM _table_ AS _ WHERE Name=_table_.Name 
) AS _min FROM _table_ 
) ORDER BY _min, nr 

Проверьте это в http://sqlfiddle.com/#!7/674bf/5.

EDIT: если _table_ фактически является объединением таблиц, 3 варианта:

1) Создайте вид, поэтому запрос будет работать:

CREATE VIEW _table_ AS SELECT * FROM _table1_ UNION ALL SELECT * FROM _table2_ 

2) Заменить _table_ в предыдущем запросе с таблица союз:

SELECT nr, Name FROM (
    SELECT nr, Name, (
    SELECT MIN(nr) FROM (
     SELECT * FROM _table1_ UNION ALL SELECT * FROM _table2_ 
    ) AS _ WHERE Name=_table_.Name 
) AS _min FROM (
    SELECT * FROM _table1_ UNION ALL SELECT * FROM _table2_ 
) AS _table_ 
) ORDER BY _min, nr 

3) С, может быть, некоторые оптимизации (я, возможно, сказал):

SELECT _un.* FROM (
    SELECT * FROM _table1_ 
    UNION ALL 
    SELECT * FROM _table2_ 
) AS _un 
JOIN (
    SELECT Name, MIN(nr) AS _min FROM (
    SELECT * FROM _table1_ 
    UNION ALL 
    SELECT * FROM _table2_ 
) GROUP BY Name 
) AS _min ON _un.Name=_min.Name 
ORDER BY _min, _un.nr 
+0

sqlite не может выполнить этот запрос, это дает мне ошибку, и из того, что я вижу, я думаю, что у него что-то отсутствует. Спасибо за ваш быстрый пост. –

+0

В инструкции ORDER BY изменить Мин на имя – Santhosh

+0

Упс, забыл один 'FROM table'! Проверь это сейчас. –

1
SELECT NAME, ID 
FROM TABLE 
ORDER BY NAME, ID 
+0

Это дает мне только первый элемент в группе, мне нужны все элементы –

+0

Можете ли вы сказать это, что хотите (запрос отредактирован) – Santhosh

+0

Нет, он не упорядочивает группы на основе первого nr в этой группе. Ответ LS_dev почти завершен, недостающая часть - «SELECT nr, Name, (SELECT MIN (nr) FROM table AS _ WHERE Name = table.Name)» + «FROM table» - второй выбор не имел «FROM», , Но у меня все еще есть проблема, вместо таблицы у меня есть союз из двух –