問題タブ [window-functions]
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.
postgresql - PL/pgSQLでこの関数を書くにはどうすればよいですか
次のスキーマを持つテーブルがあります。
foofunc()
前の行を参照し、次のロジックに基づいて値を返す関数を作成したいと考えています。
次のように関数を呼び出せるようにしたいfoofunc()
:
実装方法を教えてくださいfoofunc()
。
sql - ROW_NUMBER()は予期しない値を示しています
私のテーブルには次のような値があります(RowCount
以下のクエリによって生成されます):
ID
列はIDENTITY列です。
そして、私はこのクエリを使用して、連続する行数を次のように取得しています。
私が得るものはほとんどのRowCount
値に対して正しいが、いくつかの値に対しては間違っている。例えば:
- ID1699100価格58.13–カウントは1である必要があります(3を表示)。
- ID1699104価格57.96–カウントは1である必要があります(2を表示)。
- ID 1699105、1699106価格57.93 –カウントは1、2(2、3を表示)である必要があります。
PostgreSQLで同じクエリを試しましたが、同じ結果が見つかりました。ここにcsvデータサンプル
をアップロードしました。
私はパーティションのそのような予期しない結果で立ち往生しています。誰か助けてもらえますか?
sql - postgres で行番号を選択
postgres で行番号を選択する方法。
私はこれを試しました:
このエラーが発生しました:
これらのページをチェックしました: How to show row numbers in PostgreSQL query?
これは私のクエリです:
これはエラーです:
エラー: "over" またはその近くで構文エラーが発生しました LINE 1: select row_number() over (ORDER BY cgcode_odc_mapping_id)as
sql-server-2008 - Count()およびウィンドウ関数を使用したSQL内部結合
という名前の別のテーブルがありtblCustomers
、列isAssistent
Type( bit
)があります
inner join
内部結合を試みましたが、複雑すぎて withのフィルターを適用しようとするとエラーが発生します
正しい構文の書き方を知って、とても感謝しています。
再編集
エラー、最後の試行の 1 つ
メッセージ 4104、レベル 16、状態 1、行 14 マルチパート識別子 "tblProblems.CustID" をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子「tblproblems.problemID」をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子 "tblproblems.custID" をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子 "tblproblems.StationName" をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子「tblproblems.problemCode」をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子 "tblproblems.ProblemCreateDate" をバインドできませんでした。
これは私が行った野生の推測です:
目的は、tblCustomers.isAssistent=1 の場合にのみ tblProblems の結果を選択することでした。
sql - PostgreSQLが最後の3つのログイン日の違いを見つける
各顧客の最後の3つのログイン日を取得し、最後のログインの前(login3)と最後のログイン(login1)の間に4日以上ある顧客を見つけたいと思います。
「アクティビティ」テーブルには次のものが含まれます。
- ユーザーID
- login_dateはDATETIME形式ですが、時刻は常に00:00:00です。
- (および問題フィールドに関連しない他のいくつか)
いくつかのクエリを試しましたが、どれも正しく機能していません。
sql - SELECT で重複する後続のレコードを除外する
(PostgreSQL 8.4) テーブル「trackingMessages」には、モバイル デバイス (tm_nl_mobileid) と固定デバイス (tm_nl_fixedId) の間の追跡イベントが格納されます。
ここでの問題は、同じモバイルが同じ固定電話に 2 回 (またはそれ以上) 接続する可能性があることです。後続のものは見たくありませんが、間に別の固定への接続があった場合は、後で同じ固定に接続されたモバイルが表示されても問題ありません。
私は近いと思いますが、完全ではありません。私は次のCTEを使用しています(スタックオーバーフローでここにあります)
次の結果が得られます
ここでの問題は、最後の列が 1、1、1、2、1 でなければならないことです。これは、3 番目の「32」が実際には重複した追跡イベント (同じ固定で 2 回続けて) であり、「21」への最後の接続であるためです。 「32」が間にあったのでOKです。
カーソルを提案しないでください。これは私が現在離れようとしているものです。カーソル ソリューションは機能しますが、処理しなければならないレコードの量を考えると遅すぎます。CTE を修正して、場所だけを選択したいのですがRN = 1
...もっと良いアイデアがない限り!
sql - 特定の条件と適切なlead()の使用法を超えてSQLギャップをジャンプする
(PostgreSQL 8.4)前の例を続けて、ウィンドウ関数を使用したギャップとアイランドの処理についてさらに理解を深めたいと思います。次の表とデータを検討してください。
前に説明したように、デバイスはオンとオフを切り替えます。今回は特定のシーケンスを抽出したいと思います。
- 重複していないすべての新しい
ON
ステータスレコードを表示します(同じデバイスを2回続けて表示します) - 現在のデバイスから適切な
OFF
ステータスを表示するON
私が得ることができる最も近いものはこれです:
これにより、サンプルに含まれていないより多くの偽のデータが除外されますが、基本的には、後続の重複(ステータスに関係なく)とOFF
一致しない上位レコードを削除することです。レコード、、、3
が返されますが4
、5番目は必要ありません。新しいの後に来たものです。そのため、そのギャップを飛び越えて、現在アクティブなデバイスに適した次のデバイスを探す必要があります。5
6
OFF
ON
OFF
- 10がオフになります-このコンテキストでは偽物ですが、lag()を台無しにします
- 11がオフになります-このコンテキストでは偽物ですが、lag()を台無しにします
- 11がオンになります-OK、新しいシーケンス、SELECTに含めます
- 10がオンになります-OK、新しいシーケンス、SELECTに含める
- 11がオフになります-メッセージが遅れて届きました。ギャップを無視する必要があります
- 10がオフになります-OK、行4に対して適切なオフ、SELECTに含める必要があります
適切にフィルタリングされたら、その上で次の行のID(タイムスタンプを想像してください)を取得し、ステータスlead()
ではないすべてのレコードを除外したいと思います。ON
これには3つの埋め込みSELECTステートメントが必要になると思います。ON
これにより、別の状態または適切な回転の状態になるまで、デバイスがアクティブであった期間を明確に理解できますOFF
。
sql - rank() 関数付近の構文エラー
書き直す必要がある SQL クエリを作成しました。基本的に、それは次のようなことをします:
また、PostgreSQL の最新バージョンで完全に動作します。
ただし、次の命令:
... 現在インストールされている PostgreSQL バージョンで構文エラーが発生し、それを回避する解決策を見つける必要がありますが、手がかりがありません。
エラー : クエリが失敗しました: エラー: "over" またはその付近で構文エラーが発生しました LINE 21: rank() over (partition by ...
mysql - row_number 関数のエミュレート
X カテゴリ、Y フォーラム、Z スレッドがあります。
- スレッドは 1 つのフォーラムに属します
フォーラムは 1 つのカテゴリに属します
X カテゴリを選択できるようにしたい
- 各カテゴリに最初の 3 つのフォーラムを選択し、
- 各フォーラムに最初の 4 つのスレッドを選択します。
(数字は一例です)
これは、変数を介して row_numbers をエミュレートすることで行いました。mysql はそのままではこれをサポートしていないためです。
残念ながら、行番号にはまだ何か問題があります。たぶん、誰かがここで何が間違っているかを見ることができます。読みやすくするために、コードを強調表示してクエリと結果をここにアップロードしました
結果は次のようになります。
最後に、次を指定できるようにする必要があります。
- WHERE CatRow <= 9 AND
- ForumRow <= 3
- AND ThreadRow <= 4
これは、row_numbers が間違っているため、まだ実行できません。何か案は???
実際には、結果を次のようにしたいと考えています。
sql - SQL:返された行の一部を無視し、他の行を削除します
私はこのテーブルを持っています:
この特定のルールを使用して、このテーブルからアイテムを削除する必要があります。
- それぞれについて
recipient_id
、最後に読み取った5つのアイテムを保持し、古い読み取り済みのアイテムを削除します。
私はRECURSIVE WITH
声明で心を曲げようとしましたが、惨めに失敗しました。私は自分のソリューションをプログラムで実装しましたが、まともな純粋なSQLソリューションがあるかどうかを知りたいと思いました。