テーブル名「Numerator」には、No_Fact、Numerat、Date の 3 つの列があります。このような:
No_Fact Numerat Date
1207020015 000713 2012-07-02 00:00:00.000
1207020016 000720 2012-07-02 00:00:00.000
1207020017 000722 2012-07-02 00:00:00.000
1207020019 000723 2012-07-02 00:00:00.000
1207020022 000724 2012-07-02 00:00:00.000
1207020021 000733 2012-07-02 00:00:00.000
1207020020 000734 2012-07-02 00:00:00.000
1207020018 000735 2012-07-02 00:00:00.000
1208120001 000766 2012-08-12 00:00:00.000
1208120002 000769 2012-08-12 00:00:00.000
1208230001 000777 2012-08-23 00:00:00.000
1208230002 000780 2012-08-23 00:00:00.000
Numerat 列内の数値の間に欠落している数値を表示したいので、次のコードを使用してみました。
SELECT A.Numerat+1 AS 'MISSING FROM', MIN(B.Numerat)-1 AS 'TO'
FROM Numerator A, Numerator B
WHERE A.Numerat < B.Numerat
GROUP BY A.Numerat
HAVING A.Numerat+1 < MIN(B.Numerat)
ORDER BY 1
そして結果セット:
MISSING FROM TO
714 719
721 721
725 732
736 765
767 768
770 776
778 779
素敵なコーデですね。しかし、シーケンス番号が多すぎて、簡潔にする必要性と両立しません。したがって、今日 (2012-08-23) のみのパーツ行を表示したい場合は、次のようにします。
MISSING FROM TO
778 779
それを解読できる人にはとても感謝しています、ありがとう。
表の挿入の次の行が 2012 年 8 月 23 日に始まったときに興味深いことがあります。
No_Fact Numerat Date
1208230001 000777 2012-08-23 00:00:00.000
1208230002 000780 2012-08-23 00:00:00.000
1208250001 000782 2012-08-25 00:00:00.000
1208250002 000783 2012-08-25 00:00:00.000
1208250003 000784 2012-08-25 00:00:00.000
1208250004 000785 2012-08-25 00:00:00.000
1208250005 000786 2012-08-25 00:00:00.000
1208250006 000788 2012-08-25 00:00:00.000
1208250007 000789 2012-08-25 00:00:00.000
1208250008 000790 2012-08-25 00:00:00.000
1208250009 000793 2012-08-25 00:00:00.000
1208250010 000794 2012-08-25 00:00:00.000
当初の目的として、Numerat 列の欠落している数字を確認し、要約すると、この日 1 人で入力した行を表示したかっただけでした。その後、bluefeet からのアドバイスを受けて、次のコードを使用します。
SELECT A.Numerat+1 AS 'MISSING FROM', MIN(B.Numerat)-1 AS 'TO'
FROM Numerator A
INNER JOIN Numerator B
ON A.Numerat < B.Numerat
AND a.Tanggal = DATEADD(DAY, DATEDIFF(DAY, 0, GetDate()), 0)
GROUP BY A.Numerat
HAVING A.Numerat+1 < MIN(B.Numerat)
ORDER BY 1
そして結果を達成する:
MISSING FROM TO
787 787
791 792
注意深く見ると、表示されていない欠落している番号があります。つまり、次のとおりです。
MISSING FROM TO
781 781
しかし、日付を含めて正確にはわかりませんか?23 または 25 です。この場合、この欠けている数字が正確に何日に当たるかを知ることは重要ではありません。明らかに、欠けている数字が 1 つあります。注意が必要です。すべての祝日の 24 日が期限です。入力しましょう。 25日に。誰でも助けることができますか?