2009-03-30 2 views
3

Каков наиболее эффективный способ выбора только первого и последнего элементов из столбца в SQLite?Самый эффективный способ выбора 1-го и последнего элемента, SQLite?

+0

Укажите, пожалуйста, марку базы данных, которую вы используете. Например. MySQL, Microsoft SQL Server, Oracle и т. Д. –

+0

Просто используйте имена элементов. Фактический порядок, в котором они хранятся, является абстракцией. –

ответ

14

Первый и последний элемент от строка?

SELECT column1, columnN 
FROM mytable; 

Я думаю, вы должны понимать первый и последний элемент из колонок:

SELECT MIN(column1) AS First, 
     MAX(column1) AS Last 
FROM mytable; 

http://www.sqlite.org/lang_aggfunc.html См для MIN() и MAX().

Я использую First и Last как псевдонимы столбцов.

+0

Обязательно наличие индекса в этом столбце –

+0

Возможно, нет, если это разовый запрос - он все равно работает. – dkretz

+0

Да, колонка, извините, все еще спит –

2

Наверное так:

SELECT dbo.Table.FirstCol, dbo.Table.LastCol FROM Table 

Вы получаете незначительные улучшения эффективности с указанием имени таблицы и схемы.

3

Наиболее эффективным способом было бы знать, что эти поля были вызваны, и просто выбрать их.

SELECT `first_field`, `last_field` FROM `table`; 
+0

¿WTF? первая и последняя строка * из столбца *, а не первый и последний столбцы из строки. – vartec

+0

@vartec Вопрос был изначально сформулирован: «Какой самый эффективный способ выбрать только первый и последний элементы из строки в SQL?» –

7

, если это только один столбец:

SELECT min(column) as first, max(column) as last FROM table 

, если вы хотите, чтобы выбрать всю строку:

SELECT 'first',* FROM table ORDER BY column DESC LIMIT 1 
UNION 
SELECT 'last',* FROM table ORDER BY column ASC LIMIT 1 
1

мин()/макс() подход является неправильным. Это верно, если значения только возрастают. Мне нужно что-то подобное для валютных курсов, которые являются случайным повышением и падением.

Это мое решение:

select st.* 
from stats_ticker st, 
    (
     select min(rowid) as first, max(rowid) as last --here is magic part 1 
     from stats_ticker 
     -- next line is just a filter I need in my case. 
     -- if you want first/last of the whole table leave it out. 
     where timeutc between datetime('now', '-1 days') and datetime('now') 
     ) firstlast 
WHERE 
    st.rowid = firstlast.first  --and these two rows do magic part 2 
    OR st.rowid = firstlast.last 
ORDER BY st.rowid; 

волшебная часть 1: результаты подвыборки в одном ряду с колоннами первых, последний содержащий RowId годов.

магия часть 2 легко фильтровать на этих двух рядах.

Это лучшее решение, которое я придумал до сих пор. Надеюсь, вам понравится.

0

Мы можем сделать это с помощью функции , например Max и Min. Это две агрегированные функции, которые помогут вам получить последний и первый элемент из таблицы данных.

Select max (column_name), min(column name) from table name 

Max даст вам максимальное значение означает, что последнее значение и min даст вам минимальное значение означает, что она даст вам первое значение, из конкретной таблицы.

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