2017-09-04 4 views
0

SQL Serverから定期的にデータを取得しているアプリケーションを実行しました。ここでの問題は、最後に読み込んだ後に作成されたレコードを取得したいということです。SQL Serverから新しいデータのみを取得する

例を示しましょう。まず

、(12時00分00秒で)

Table 
--------- 
orderId orderName 
1  name1 
2  name2 
3  name3 
4  name3 

私はここにすべてのデータを選択するつもりです。 1分後

SELECT * 
FROM TABLE 

私は以下のようなデータを選択した場合、一部のデータは私が欲しいもの

select * 
from TABLE 

、この時点では、以下のようなテーブルに

Table 
--------- 
orderId orderName 
1  name1 
2  name2 
3  name3 
4  name3 
5  name4 
6  name5 

を追加しました。行はいいえです。 5と6番の行は、前に選択した後に追加されます。

私の考えでは、IDのトランザクションなどを示す識別子を保持する必要がありますが、私はまだ考えていません...あなたは私を助けてくれますか?私を助けるどんなキーワードかリンク?

リフレッシュイベントを実装して、私が期待しているアイデアで新しいデータだけを得ることは役に立ちます。


ありがとう、私は持っているより具体的なテーブルです。

Table 
--------- 
orderId  orderTime 
1  2017-9-4 8:00:00.000 
1  2017-9-4 8:00:10.000 
1  2017-9-4 8:00:20.000 
1  2017-9-4 8:00:30.000 
1  2017-9-4 8:00:40.000 
1  2017-9-4 8:00:50.000 

2  2017-9-4 8:00:11.000 
2  2017-9-4 8:00:20.000 
2  2017-9-4 8:00:32.000 
2  2017-9-4 8:00:40.000 

さらに、時間レコードはそれぞれorderIdに基づいて連続して追加されます。私が最後の注文を保持するというほとんどのアイデアは、私の場合にはうまくいかないかもしれません。この場合、どうすれば対応できますか?

+0

*「私の考えでは、IDなどのトランザクションを示す識別子を保持する必要があります。」* - これは始めるには良い方向です。あなたはどこにいるのですか?そしてアプリケーションはどの言語で書かれていますか? –

+0

変数に 'orderId'の最後の値を保存せず、' select * from table where orderId> yourvariable'を実行するのはなぜですか? – MatSnow

+1

あなたは '変更データキャプチャ'または '変更追跡 'を探していますか?いずれかが適切なアプローチであるかどうかは、あなたが必要とするものなど、他の多くの要因によって決まります。更新と削除を行います。 –

答えて

0

最終実行の最新エントリを識別するキーワードはありません。なぜなら、あなたのクエリは、異なるセッションで両方の時間を実行するからです。だから、それを特定することはできません。

しかし、基本的にこのタスクを実行するための他の選択肢があります。

  1. 識別子の最大値を維持してください。あなたはいつもどこかであなたがorderId、それを使用することを知っている、そしてあなたの最後のselectで持ってきた最大のorderIdを保存する必要があるなど、セッション、パラメータ、変数にそれを維持する...

    select * 
    from table 
    where orderId > yourvariableValue 
    
+1

実際のテーブルを更新しました。この場合、動作しないようです。 – sunsets

+0

識別子をDateTimeで置き換える必要があり、時間を保存し、時間フィールドと比較する必要があります。 –

0

select ... 
from ... 
where orderId > 4 
+0

それは良い考えですが、私の場合はもっと複雑です。申し訳ありません、私はあなたに以前に知らせていませんでした。それはまったく違うかもしれません... – sunsets

0

ストアの最後の注文ID 変数に関連付けられた最後のorderTime:このような、あなたのselectインチ
これは必要に応じて機能するはずです。

DECLARE @lastOrderId int = 2 
DECLARE @lastOrderTime datetime = '2017-9-4 8:00:40.000' 

SELECT * FROM Table 
WHERE (orderId = @lastOrderId AND orderTime > @lastOrderTime) OR orderId > @lastOrderId 
ORDER BY orderId, orderTime; 
0

セッション、変数などで保存するための多くの曖昧な提案があります。ローカルテーブルの最後のキー検索

:私はあなただけのテーブル自体を使用することをお勧め

SELECT ISNULL(MAX(OrderID),0) FROM TABLE 

使ってリモートテーブルから選択するかを決定するために

DECLARE @MaxID INT 
SELECT @MaxID = ISNULL(MAX(OrderID),0) FROM TABLE 


INSERT INTO TABLE (OrderID, Col1, Col2) 
SELECT OrderID, Col1, Col2 
FROM REMOTETABLE 
WHERE OrderID > @MaxID 
私が見

これはうまくいかないとの最新の編集があります。何故誰も助けの機会がない理由を説明する必要があります。 OrderIDが必ずしも増加するとは限りませんか?それは後ろに行くことができますか?あなたは説明する必要があります。

関連する問題