T-SQL Как выбрать только вторую строку из таблицы?

Итак, может показаться, что существует функция Name() типа Symbol, которая возвращает String. Я искал функцию типа Symbol и не нашел ее (должно быть, пропустил). Код, который работал, был hName.As<Symbol>()->Name().As<String>();.

Как отмечено ниже в комментариях, Symbol() не обязательно иметь имя, так что будьте осторожны!

28
задан Adam Miller 20 August 2015 в 19:46
поделиться

6 ответов

У меня есть намного более легкий путь, чем вышеупомянутые.

DECLARE @FirstId int, @SecondId int

    SELECT TOP 1 @FirstId = TableId from MyDataTable ORDER BY TableId 
    SELECT TOP 1 @SecondId = TableId from MyDataTable WHERE TableId <> @FirstId  ORDER BY TableId 

SELECT @SecondId 
0
ответ дан 28 November 2019 в 02:17
поделиться

Используйте ROW_NUMBER() для нумерации строк, но используйте TOP для обработки только первых двух.

попробуйте это:

DECLARE @YourTable table (YourColumn int)
INSERT @YourTable VALUES (5)
INSERT @YourTable VALUES (7)
INSERT @YourTable VALUES (9)
INSERT @YourTable VALUES (17)
INSERT @YourTable VALUES (25)

;WITH YourCTE AS
(
  SELECT TOP 2
    *, ROW_NUMBER() OVER(ORDER BY YourColumn) AS RowNumber
  FROM @YourTable
) 
SELECT *
FROM YourCTE
WHERE RowNumber=2

ВЫВОД:

YourColumn  RowNumber
----------- --------------------
7           2

(1 row(s) affected)
8
ответ дан 28 November 2019 в 02:17
поделиться

Выберите 2 верхних [id] из таблицы Порядок по [id] desc должен дать вам две последние добавленные строки.

Однако особое внимание следует уделить предложению order by, так как оно определяет возвращаемые 1-ю и 2-ю строки.

Если бы запрос нужно было изменить следующим образом:

Выберите первые 2 [id] из таблицы Упорядочить по дате изменения desc

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

2
ответ дан 28 November 2019 в 02:17
поделиться

Конечно, TOP будет отображаться, если вам просто нужны TOP 2, но если вам нужны они по отдельности, чтобы вы могли что-то сделать с этими значениями, используйте ROW_NUMBER, что даст вам больше контроля над строками, которые вы хотите выбрать

шт. Я сделал это, так как не уверен, что OP следует за простым TOP 2 в выборе. (Возможно, я ошибаюсь!)

-- Get first row, same as TOP 1
SELECT [Id] FROM 
(
    SELECT [Id], ROW_NUMBER() OVER (ORDER BY [Id]) AS Rownumber
    FROM table
) results
WHERE results.Rownumber = 1

-- Get second row only
SELECT [Id] FROM 
(
    SELECT [Id], ROW_NUMBER() OVER (ORDER BY [Id]) AS Rownumber
    FROM table
) results
WHERE results.Rownumber = 2
1
ответ дан 28 November 2019 в 02:17
поделиться

Используйте TOP 2 в SELECT, чтобы получить желаемое количество строк в выводе. Это вернет в последовательности, в которой были созданы данные. Если у вас есть опция даты, вы можете заказать по дате вместе с пунктом TOP n.

Чтобы получить 2 верхние строки;

SELECT TOP 2 [Id] FROM table 

Чтобы получить 2 верхние строки, упорядоченные по некоторому полю

SELECT TOP 2 [ID] FROM table ORDER BY <YourColumn> ASC/DESC

Чтобы получить только 2-ю строку;

WITH Resulttable AS 
( 
  SELECT TOP 2 
    *, ROW_NUMBER() OVER(ORDER BY YourColumn) AS RowNumber 
  FROM @Table 
)  
SELECT *
FROM Resultstable
WHERE RowNumber = 2
1
ответ дан 28 November 2019 в 02:17
поделиться
SELECT TOP 2 [Id] FROM table
-2
ответ дан 28 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

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