row_number、desek_rank、ntile、その他の関数の適用について

数日前、カードマシーンでパンチを入れていて、授業の区別がつかなかったので出席問題に対応していましたが、SSRSレポート作成時にデータが乱雑でした。ランキング関数にはいくつかありますが、よく使われるものについて話しましょう。

1つ:row_number

      row_number:この関数の目的は非常に広範であり、この関数の機能は、レコードの各行のシーケンス番号を生成することです。row_number関数の使用法を次のSQLステートメントに示します。select row_number()over(order by field1)as row_number、* from t_table


2:densense_rank:
    densense_rank関数は、シーケンス番号が生成されるときにシーケンス番号が連続し、rank関数によって生成されるシーケンス番号が連続しない場合があることを除いて、rank関数に似ています。上記の例でデンスランク関数を使用する場合、4番目のレコードのシーケンス番号は4ではなく2にする必要があります。次のSQLステートメントに示されているように、
(field1による順序付け)over *(field1による順序付け)から、dense_rank()を選択します。


3:ntile

NTILE()関数は、レコードの結果セットをNの部分に分割し、overとともに使用されます。たとえば、select *、ntile(5)over(id by order)from a dividing the ID column from 5 parts

私のクレジットカードの元の記録について話してください。


デイシフトのワーキングシフトによると、以下は人とカードスワイプの時間をランク付けし、同時にカードスワイプが繰り返されるため、最小時間パンチングデータと最大時間パンチングデータを最終的に取り出すので、ランキングを区別するためにパーティションを使用する必要があります。

個別にランク付けするには、row_numberとdensity_rankを使用します。効果を図に示します。最後に、dense_rankを使用します。効果を見てみましょう。


最後に、min、max、caseを使用して、スワイプして作業に時間を費やす時間を組み合わせて使用​​します(パーツが省略されている場合)。もちろん、07:00パンチ、12:00パンチ、17:00パンチ、18:00パンチなどのデータがある場合、この方法では、正確な通勤データを取得する方法はありません。結果を図に示します。



元の記事を22件公開 賞賛7件 100,000回以上の閲覧

おすすめ

転載: blog.csdn.net/qyx0714/article/details/72683408