2016-07-05 3 views
5

私は実行する必要があるクエリがあります。これは、各クライアントの最新の更新された行を返します。 SQL ServerでのROW_COUNTインターシステムキャッシュに相当しますか?

、私は次のようにします:

SELECT * 
FROM 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY date_updated DESC) AS rn 
    FROM client_address 
) a 
WHERE a.rn = 1 

インターシステムズキャッシュ上でこれを行うには同様の方法はありますか?私はどのような種類のランキング関数についても何のドキュメントも見つけていません。

答えて

3

the documentation for HAVINGを参照してください。この場合の使用方法は次のとおりです。

SELECT * 
FROM client_address 
GROUP BY client_id 
HAVING date_updated = MIN(date_updated) 
+1

'SELECT * FROM t GROUP BY ID'は機能しますか?グループで指定されていないフィールドではどうなりますか? –

+0

InterSystems Developer Community https://community.intersystems.com/post/top-group-sql-query-cach%C3%A9に関する質問についての議論があります –

4

私はthe docsを見ましたが、ANTI-THETA-SELF-JOINソリューションに悩まされているように、SQL Server、Oracle、またはPostgresに存在するウィンドウ関数のいずれも表示されません。

SELECT * 
FROM 
    client_address a 
    LEFT JOIN client_address b 
    on a.client_id = b.client_id 
    and a.date_updated < b.date_updated 
WHERE 
    b.client_id is null 
+0

なぜこれがダウンリストされたのか分かりません。それは何らかの形で間違っていますか?例えばこの式はキャッシュでサポートされていませんか?それはオペラが望んでいたことをしないのですか? –

+0

なぜそれがダウンボトリングされたのか分かりません。それは仕事をする。 –

+0

私は、同じタイムスタンプを持つ> 1行がある場合、すべてを返すというクエリを見るだけで推測しています。私は正しいですか? –

0

可変番号%vidを使用できます。たとえば:

SELECT *, %vid FROM (SELECT * FROM Sample.Person) WHERE %vid BETWEEN 5 AND 10

はSample.Personのテーブルから行5-10を返します。ダウン投票前

Documentation.

Discussion on InterSystems Caché developer community.

+0

あなたの問題を解決する方法についてもう少し説明できますか?私はこれを実行し、5つの行しか得られませんでした。データセットには同じクライアントの複数の行が含まれていましたが、これは私が探していた動作ではありません。 –

+0

これは、ページングの問題ではなく、グループごとの問題の1つです。 –

0

!!!!私はこれがうまくいくかどうか尋ねているだけです。過去にこれをどうやってやったのかに基づいて、私は自分のことを学びました。私は質問を理解しないかもしれないし、ダウン票を受け取るのではなく、削除したり、議論します:)

SELECT * 
FROM client_address a 
WHERE 
a.date_updated = 
(
SELECT max(b.date_updated) FROM client_address b 
group by b.Client_id 
) 
+0

これはうまくいかないと思います。最大の日付を除いて、メインクエリにサブクエリを結合するものは何もありません。おそらく、サブクエリにclient_idをインクルードしてclient_idとmax_dateの両方に結合すると、内部結合として機能します。 –

+0

@AlexBello yeah 'SELECT * FROM client_address a INNER JOIN(SELECT b.Client_id、max(b.date_updated)max_updated FROM client_address bグループby b.Client_id)c ON a.Client_id = c.Client_idおよびa.date_updated = c .date_updatedも同様に動作するはずです。 –

+0

私はそれが動作しない理由を理解していますが、私は使用している同様のクエリでConradsのソリューションを試し、同じ結果を得るか、より良いパフォーマンスを得るかどうかを確認します。ありがとう! – CoSpringsGuy

関連する問題