私はあなたがランキング機能を探している疑いがある、またはユーザーごとにさえ、単純なCOUNT(*)
? MySQLはanalytic、rankingやウィンドウ関数ではお粗末なので、気まぐれな更新やトリガーを使ってそれらをエミュレートするトリックがあります。トリガの
SELECT *, COUNT(*) OVER (PARTITION BY WATCHLIST_USER)
FROM TF_WATCHLIST_PERSISTENCE
必要がありません:
は、SQL Serverでは、あなたは、単一のユーザーに一致するレコードの上に適用COUNT()
と、各行に単一のユーザーに一致するレコードの数を返すことができます。 OVER()句を持つ集約を使用できます。
ランクを何らかの順序で使用したい場合は、ROW_NUMBER()
や `RANK()などのランキング機能の1つを使用できます。あなたがベースのユーザごとの行の位置を計算したい場合は、作成日に、たとえば次のように書くことができます:
SELECT *, ROW_NUMBER(*) OVER (PARTITION BY WATCHLIST_USER ORDER BY CreationDate)
FROM TF_WATCHLIST_PERSISTENCE
あなたはユーザー
SELECT *, ROW_NUMBER(*) OVER (PARTITION BY WATCHLIST_USER ORDER BY ID)
FROM TF_WATCHLIST_PERSISTENCE
あたりrow position
を生成するためにそれを使用することができますインクリメントIDをお持ちの場合ほとんどの場合、は行番号を格納する必要がありません。ランキング機能をクエリに追加するだけでも簡単です。
あなたがテーブルで、このような行の位置を格納する必要がない場合は、あなたが簡単なマルチ行トリガーを使用することができ
CREATE TRIGGER TF_WATCHLIST_PERSISTENCE_ADD_POSITION
ON TF_WATCHLIST_PERSISTENCE
AFTER INSERT, UPDATE
AS
update TF_WATCHLIST_PERSISTENCE
set WATCHLIST_POSITION =ROW_NUMBER() OVER (PARTITION BY WATCHLIST_USER ORDER BY ID)
FROM inserted
INNER JOIN TF_WATCHLIST_PERSISTENCE on inserted.ID=TF_WATCHLIST_PERSISTENCE.ID
それとも、のための新しいエントリを挿入したい場合は
update TF_WATCHLIST_PERSISTENCE
set WATCHLIST_POSITION =ROW_NUMBER() OVER (PARTITION BY WATCHLIST_USER ORDER BY ID)
FROM inserted
INNER JOIN TF_WATCHLIST_PERSISTENCE
ON inserted.WATCHLIST_USER =TF_WATCHLIST_PERSISTENCE.WATCHLIST_USER
既存のユーザーとすべての位置を再計算する
これを試す: 'INSERT ON TF_WATCHLIST_PERSISTENCE が UPDATE TF_WATCHLIST_PERSISTENCE SET WATCHLIST_POSITION =開始した後TRIGGER TF_WATCHLIST_PERSISTENCE_ADD_POSITION を作成する(SELECT COUNT(*) - WATCHLIST_USER = inserted.WATCHLIST_USER TF_WATCHLIST_PERSISTENCE FROM 1)行IDが=挿入 .rowidとinserted.WATCHLIST_POSITIONがnullです。 ' – TheGameiswar
ありがとう...しかし、私のManagement Studioは構文を受け入れません。 私はこのようにそれを書き換える場合、それはよくなる:INSERT ON TF_WATCHLIST_PERSISTENCEはUPDATE TF_WATCHLIST_PERSISTENCE SET WATCHLIST_POSITION =開始した後 がTF_WATCHLIST_PERSISTENCEでトリガTF_WATCHLIST_PERSISTENCE_ADD_POSITION作成 - 行ID =挿入(SELECT COUNT(*)WATCHLIST_USER = inserted.WATCHLIST_USER TF_WATCHLIST_PERSISTENCE 1から)。 rowidと挿入されます。WATCHLIST_POSITIONがヌルです しかし、それは "AS、NOT_FOR、With"と表示されます –
あなたはssmsを使用していますか? – TheGameiswar