Итак, может показаться, что существует функция Name()
типа Symbol
, которая возвращает String
. Я искал функцию типа Symbol
и не нашел ее (должно быть, пропустил). Код, который работал, был hName.As<Symbol>()->Name().As<String>();
.
Как отмечено ниже в комментариях, Symbol()
не обязательно иметь имя, так что будьте осторожны!
У меня есть намного более легкий путь, чем вышеупомянутые.
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
Используйте 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)
Выберите 2 верхних [id] из таблицы Порядок по [id] desc
должен дать вам две последние добавленные строки.
Однако особое внимание следует уделить предложению order by
, так как оно определяет возвращаемые 1-ю и 2-ю строки.
Если бы запрос нужно было изменить следующим образом:
Выберите первые 2 [id] из таблицы Упорядочить по дате изменения desc
Вы могли бы получить две разные строки. Вам нужно будет решить, какой столбец использовать в вашем заказе по оператору.
Конечно, 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
Используйте 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