Выбор энной записи в SQL-запросе

Будучи не совсем связанным с графиками SVG, но ища то же самое, я нашел хороший источник тщательно собранной полезной информации, чтобы ответить на ваш вопрос: http://wiki.python.org/moin/NumericAndScientific/ Plotting

7
задан Bill Karwin 20 June 2009 в 21:38
поделиться

9 ответов

Это классический вопрос для интервью.

В Ms SQL 2005+ вы можете использовать ключевое слово ROW_NUMBER () и иметь Predicate ROW_NUMBER = n

USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
)  

SELECT * 
FROM OrderedOrders 
WHERE RowNumber = 5;

В SQL2000 вы могли бы сделать что-то вроде

SELECT Top 1 *FROM
[tblApplications]
where [ApplicationID] In
(
    SELECT TOP 5 [ApplicationID]
    FROM [dbo].[tblApplications]
    order by applicationId Desc
)
9
ответ дан 6 December 2019 в 08:16
поделиться

Как насчет

SELECT TOP 1 * FROM 
   (SELECT TOP 8 * FROM Comments ORDER BY foo ASC)
ORDER BY foo DESC
4
ответ дан 6 December 2019 в 08:16
поделиться

Во-первых, вы должны сказать, какую СУБД вы используете.

Во-вторых, вы должны тщательно обдумать, чего именно вы пытаетесь достичь. Реляционные базы данных основаны на наборах. В общем, порядок элементов в наборе не имеет значения. Вы захотите спросить, почему это имеет значение в данном случае, а затем посмотрите, есть ли лучший способ встроить концепцию порядка в сам запрос.

Например, в SQL Server 2005 (и других СУБД) вы можете использовать функция ROW_NUMBER для присвоения порядкового номера каждой возвращаемой строке на основе заданных вами критериев. Затем вы можете выбирать строки на основе номера строки. Пример из электронной документации:

USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;
2
ответ дан 6 December 2019 в 08:16
поделиться
SELECT * FROM comments WHERE ...conditions... LIMIT 1 OFFSET 8

OFFSET - это хорошо для MySQL

2
ответ дан 6 December 2019 в 08:16
поделиться

Что ж, в T-SQL (диалект SQL Server) вы можете сделать следующее:

SELECT TOP 1 *
  FROM (SELECT TOP 8 *
          FROM Table
         ORDER
            BY SortField)
 ORDER
    BY SortField DESC

Таким образом вы получите 8-ю запись.

1
ответ дан 6 December 2019 в 08:16
поделиться

Для SQL Server 2005:

select rank() OVER (ORDER BY c.subject, c.date) as rank, c.subject, c.date
   from comments c
   where rank = 8
1
ответ дан 6 December 2019 в 08:16
поделиться

Я прочитал вопрос и ваши комментарии о том, что вам нужны следующие 3 комментария в блоге и т. Д.

Как структурированы ваши таблицы?
Предположим, что у вас есть идентификатор сообщения в блоге и идентификатор комментария генерируется в возрастающем порядке для каждого сообщения в блоге, вы можете выполнить SELECT на основе текущего идентификатора.

например, если blogpostId = 101, вы получите первые 3 комментария в порядке публикации Мне бы. Теперь предположим, что вы хотите получить следующие 3 комментария - вы можете сделать SELECT WHERE commentId между показанным идентификатором последнего комментария и идентификатором комментария - 3

Но все это зависит от того, как определены ваши таблицы.

1
ответ дан 6 December 2019 в 08:16
поделиться

В SQL 2000, где у вас нет функции ROW_NUMBER (), вы можете использовать такой обходной путь:

SELECT CommentsTableFieldList, IDENTITY(INT, 1,1) as seqNo 
INTO #SeqComments 
FROM Comments

SELECT * FROM #SeqComments 
WHERE seqNo = 8
1
ответ дан 6 December 2019 в 08:16
поделиться

Из справочника SELECT используйте ключевое слово LIMIT:

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15
SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows

Примечание: это для MySQL, другие механизмы SQL могут иметь другое ключевое слово.

0
ответ дан 6 December 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: