FIRST()およびLAST()のSQL Server 2012バージョンは何ですか?


10

value列のあるテーブルがあります。次に示すように、最後の行から最初の行を差し引いて計算します。

 id      value
  1       10
  2       45
  3       65
  4       95
  .       .
  .       .
  .       .
 500     200

入手したい 200 - 10 = 190

SQL Server 2012で以下のコマンドを使用しようとしましたがLAST、機能FIRSTしません。

SELECT LAST(Value) - FIRST(Value) FROM Counter;

SQL Serverでのこのコマンドの構文は何ですか?


@ mohammad2050-問題は、「最初」と「最後」の行をどのように定義するかです。順序を定義する他の列はありますか?たとえば、「最初の」行と「最後の」行が何であるかを定義するIDENTITY列またはおそらくDATETIME列がありますか?
Max Vernon

1
はい、私は最後まで1であり、IDENTITY列であるid列とタンク問題を編集するためのMaxを
持っ

回答:


20

あなたは近くにいた- FIRSTそしてLASTAccessから来た。SQL Server(SQL Server 2012以降)では、FIRST_VALUE()LAST_VALUE()です。

したがって、あなたが2012以上(またはAzure SQLデータベース)である場合、答えを得る1つの方法は次のとおりです。

CREATE TABLE #fl
(
  IdentityColumn INT IDENTITY, 
  Value INT
);

INSERT #fl(Value) SELECT 10;
INSERT #fl(Value) SELECT 45;
INSERT #fl(Value) SELECT 65;
INSERT #fl(Value) SELECT 95;
INSERT #fl(Value) SELECT 200;

SELECT TOP (1) LAST_VALUE(Value) OVER (ORDER BY IdentityColumn)
            - FIRST_VALUE(Value) OVER (ORDER BY IdentityColumn)
  FROM #fl
  ORDER BY IdentityColumn DESC;

GO
DROP TABLE #fl;

9

もう1つの方法(古いバージョンでも機能します):

SELECT 
    result = (SELECT TOP (1) value FROM counter ORDER BY id DESC)
             - (SELECT TOP (1) value FROM counter ORDER BY id ASC) ;

1

これを行う方法の1つを次に示します。

USE tempdb;

CREATE TABLE dbo.Test1
(
    ID INT NOT NULL
        CONSTRAINT PK_Test1 
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , Val INT NOT NULL
);
INSERT INTO dbo.Test1 (Val)
VALUES (1)
    , (2)
    , (3)
    , (50);

;WITH FirstAndLast
AS (
    SELECT t.ID
        , t.Val
        , RN  = ROW_NUMBER() OVER (ORDER BY ID)
        , RND = ROW_NUMBER() OVER (ORDER BY ID DESC)
    FROM dbo.Test1 t
)
SELECT TOP(1) l.Val - f.val
FROM FirstAndLast f
    INNER JOIN FirstAndLast l ON f.RN = l.RND

ここでの考え方は、「最初」と「最後」の行を定義することです。それらを定義したら、単純に減算を実行できます。


-2

MAX関数とMin関数を使用しない理由(条件がある場合はオプション)

例えば。TableNameから(Max(NumFieldName)-Min(NumFieldName))AS出力を選択します


1
Value列が常に増加しているという保証はありません。ただし、ID列はそうです。
RDFozz 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.