新しいデータが始まりid=1
、増加するテーブルがありますid
。古いデータに到達します。問題は、新しいデータが毎日追加されるため、新しいデータから古いデータへの結果を表示したいので、問題。新しいデータを追加した後でも、新しいデータから古いデータにデータを表示できるように、テーブルの順序を逆にします。
誰かが私が何をすべきか手がかりがありますか?
新しいデータが始まりid=1
、増加するテーブルがありますid
。古いデータに到達します。問題は、新しいデータが毎日追加されるため、新しいデータから古いデータへの結果を表示したいので、問題。新しいデータを追加した後でも、新しいデータから古いデータにデータを表示できるように、テーブルの順序を逆にします。
誰かが私が何をすべきか手がかりがありますか?
スイッチオーバーが発生する任意の番号をハードコーディングできます。現在1,000行あるとします(つまり、#1が最新ですが、追加されると#1001が最新になります):
SELECT (CASE WHEN id < 1000 THEN id * -1 ELSE id END) AS sort_order
ORDER BY sort_order DESC
実際のデータを自動生成された列に依存するのは良くないので、おそらくより良い解決策はタイムスタンプ列を追加することです。
編集
新しいテーブルを作成するには、上記を挿入して使用します。
INSERT INTO [new_table] (col1,col2,col3, ...)
SELECT (col1, col2, col3, ...)
FROM [old_table]
ORDER BY (CASE WHEN id < 1000 THEN id * -1 ELSE id END) DESC
datetime
テーブルにフィールドを追加することをお勧めします。
ただし、これまでID = 1が最新であったため、IDを注文フィールドとして直接使用することはできませんが、今後はすべての新しいレコードがXよりも高いIDを取得します。したがって、最も古いレコードのID値であるXを識別する必要があります。今。次に、2つのケースで注文できます。
ここに例がありX=10
ます:
SELECT ID
FROM dbo.tbl
ORDER BY CASE WHEN ID <=10 THEN ID ELSE -ID END ASC
これがフィドルです:http ://sqlfiddle.com/#!6 / 95c9a / 3/0
ただし、コンテンツを新しいテーブルにコピーして、別の方法で処理する必要がないようにします。
次に、上記のSQLを使用して、この順序で新しいテーブルに挿入できます。私は新しいID
列を使用しますIDENTITY(1,1)
:
INSERT INTO dbo.tblCopy
SELECT ID
FROM dbo.tbl
ORDER BY CASE WHEN ID <=10 THEN ID ELSE -ID END ASC
ROW_NUMBER
別の列を追加せずに古いIDを再利用する場合は、上記で使用できますCASE
。
INSERT INTO dbo.tblCopy
SELECT ID =
ROW_NUMBER()OVER(ORDER BY CASE WHEN ID <=10 THEN ID ELSE -ID END ASC)
FROM dbo.tbl