問題タブ [row-number]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SQLランキング機能は「注意して使用する」と考えるべきか
この質問は、特定のケースで SQL ランキング機能を使用するかどうかについての議論から生じています。
一般的な RDBMS にはランキング機能が含まれています。つまり、クエリ言語にはTOP n ... ORDER BY key
、ROW_NUMBER() OVER (ORDER BY key)
、またはORDER BY key LIMIT n
( overview ) などの要素があります。
膨大な数のレコードから小さなチャンクのみを表示したい場合、パフォーマンスを向上させるのに非常に役立ちます。しかし、これらは大きな落とし穴ももたらします:key
が一意でない場合、結果は非決定論的です。次の例を検討してください。
クエリは、最後にログインした人を返すことになっています:
期待どおりGeorge
に返され、すべてが正常に見えます。しかし、新しいレコードがテーブルに挿入されlogins
ます:
上記のクエリは何を返しますか? Ringo
? George
? わかりません。私が覚えている限り、たとえば MySQL 4.1 は、基準に一致する物理的に作成された最初のレコードを返します。つまり、結果はGeorge
. ただし、これはバージョンや DBMS によって異なる場合があります。何を返すべきだった?Ringo
彼が最後にログインしたようだからと言う人もいるかもしれませんが、これは純粋な解釈です。私の意見では、利用可能なデータから明確に判断することはできないため、両方が返されるべきでした。
したがって、このクエリは要件に一致します。
別の方法として、一部の DBMS は特別な機能を提供します (たとえば、Microsoft SQL Server 2005 ではTOP n WITH TIES ... ORDER BY key
( gbnが推奨)、RANK
、およびDENSE_RANK
この目的のために を導入しています)。
たとえば、SO を検索ROW_NUMBER
すると、ランキング機能の使用を提案し、考えられる問題を指摘することを逃した多数のソリューションが見つかります。
質問: ランキング機能を含むソリューションが提案された場合、どのようなアドバイスが必要ですか?
sql - SQL Server 2005 - Row_Number()
以下のように、クエリの最も外側の選択で DISITINCT を使用するときに、row_number() 関数を使用して順序付けの結果が降順になるときに見られる異常な動作を理解しようとしています。
最も外側の DISTINCT が取り出された場合は降順で問題ありませんが、含まれている場合は結果が降順で表示されません。
sql-server - 大量のリンク/結合を使用して一度に1行を繰り返す
さて、基本的に必要なのは、多くの結合を使用し、これらの行番号を使用してwhere句を使用しながら行番号を取得する方法です。
のようなもののような
ただし、その1つのテーブルでこのクエリに対してROWNUMBERを生成する必要があります。したがって、2番目のWORKHISTORYレコードのアドレスにアクセスする場合は、次のコマンドを使用しWORKHISTORY.ROWNUMBER=2
て1つのWORKHISTORYレコードのアドレスを循環できます。ADDRESS.ROWNUMBER=1
ADDRESS.ROWNUMBER=2
これは、自動生成されたクエリである必要があります。したがって、関連するテーブルに到達するために10を超える内部結合が存在する可能性があり、残りのテーブルとは関係なく、各テーブルのレコードを循環できる必要があります。
RANK関数とROWNUMBER関数があることは知っていますが、すべての内部結合があるため、どのように機能するかわかりません。
注:このクエリ例では、ROWNUMBERが自動的に生成されます。実際のテーブルに保存しないでください
sql-server-2005 - LINQ で 1 つおきのレコードを返す
マップ上のプロット ポイントとして使用される 10000 のレコードを返すクエリがあります。負荷を軽減し、アプリの速度を上げるために、基本的に詳細レベルロジックに相当するものを実装しようとしています。基本的にズームアウト時は50%のポイントを表示します。ズームインすると、ポイントの 100% が表示されます。
最終的な SQL を次のようにする必要があります。
LINQ では、.Skip と .Take を使用して Row_Number() Over 部分を取得できます (例 here ) が、これを行う場合、生成された Where 基準では、必要な "where RowNumber % 2 = 0" の代わりに 'between' が使用されます。 .
私はこれに正しく取り組んでいますか?ここで求めている完全なパフォーマンスの向上を得るには、SQL サーバーでこの除外を実際に行う必要があります。
postgresql - Postgre で row_number() と文字列列を組み合わせる
row_number()
文字列列と計算結果を 1 つの列に結合する必要があります。
私が持っているのは、文字列を含む列1とrow_number()
結果を含む列2です。次に、両方を 1 つに結合します。
Postgresでこれを行うにはどうすればよいですか? 私は単純な+
または&
うまくいかないと考えました。
sql-server-2005 - 統合:SET ROWCOUNTまたはRowNumber()を使用したSQL 2005+動的ページネーション?
複数のJOINとルックアップを適用し、コンマ区切り値などの複雑なフィルターを使用する複雑なSPを使用しています。さらに、2つの複雑でありながらパフォーマンスに優れた機能を展開する必要があります。
1.動的ソートですが、制限があります。長い/不器用なCASE階層をご存知でしょう。専門家が、これが私たちが得た唯一の「最良の」ソリューションであることに同意するのは奇妙なことです。
SQLストアドプロシージャ内の動的ソート http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=5942
とにかく、今のところこれにはあまり期待していません。
2.動的ページネーション-つまり、SPがY(Y =ページ番号)から始まるX個のレコード(X =ページサイズ)のみを返すことができるようにしたいのです。私はあなたが一般的な考えを持っていることを望みます。
より明確にするために、MySQLとPostgreSQLで利用可能なものを使用したいと思います。
データベース:SQLページネーション? http://www.sql.org/sql-database/postgresql/manual/queries-limit.html
その奇妙なそのような単純で基本的な機能はSQL2005+では利用できません..または私は間違っています(私はそれを聞いてうれしいです:-))
パフォーマンスと複雑さのトレードオフに適した2つのアプローチを知っています-
[2.1] SQL 2005の「RowNumber()」機能を使用してからフィルターを適用する:(過去に使用したことがあります)
ただし、これも一時テーブルを作成するか、WITH句を使用する必要があります。これについては、SQLServerの行オフセットでも説明され ています。
[2.2]私はいくつかの新しい方法を見つけました。それらの1つは使用しています
http://www.4guysfromrolla.com/webtech/042606-1.shtml
そして彼らは全体的な2.2が2.1より効果的であると言います。それは...ですか?また、2つのユーザーリクエストが同じSPを同時に2回トリガーした場合にどうなるかを知りたいと思いました。同時に、SP呼び出し間で「SETROWCOUNT」が「共有」または「上書き」されないことを願っています。plsは確認します。2.1と2.2を比較する他のポイントはありますか?
reporting-services - SSRS 行グループ + 列グループ = 行番号の問題
私は別のSSRSの質問に戻ってきました:-)
調査データを扱っています。質問ごとに組織の回答数を返す手順があります。したがって、私のレポートは、行は組織のグループ、列は回答のグループとして定義されています。組織の数と回答の両方が可変です。それは期待どおりに機能しています。ランクを表示できるように、組織の横に RowCount を追加しようとしましたが、各組織には質問ごとに 1 つの行があるという事実は、組織ごとに 8 つの行を取得していることを意味します。
次に例を示します。
これが私のレポート定義です:
ランク式は現在:=RowNumber(Nothing)
理想的には、ランクは1、2、3、4などになります...行グループ、列グループにスコープを試しましたが、何もしませんでした。助け無し。
どんな援助でも大歓迎です!
sql - クエリ出力の行番号
pkey と一緒にテーブルに数値フィールド (num など) があります。
pkey を持っている特定の行のクエリ出力で行番号を取得する方法を教えてください。
私はSQL2000を使用しています。
mysql - MySQL の ROW_NUMBER()
MySQL で SQL Server の機能を複製する良い方法はありますROW_NUMBER()
か?
例えば:
次に、たとえば、1 に制限する条件を追加して、各ペアintRow
で最高の単一行を取得できます。col3
(col1, col2)