0

紳士淑女の皆様、

ビューからデータを取得するクエリを作成する必要がありますが、その方法がわかりません。問題は、実際にはキーがなく、取得する必要がある行を制御する 2 つのフィールドがあることです。

ビューは次のようになります。

Category   columna   columnb   uploaddate 
-----------------------------------------------------
   a        value     value    1/30/2013 04:04:04:000 
   a        value     value    1/29/2013 04:04:04:000 
   b        value     value    1/28/2013 01:23:04:000 
   b        value     value    1/30/2013 04:04:04:000 
   b        value     value    1/30/2013 04:04:04:000 
   c        value     value    1/30/2013 01:01:01:000 
   c        value     value    1/30/2013 01:01:01:000 

取得する必要があるのは、一意の各カテゴリと最新のすべての行ですuploaddate。したがって、上記の例では、カテゴリ a の 1 行を取得し、最新のuploaddate. カテゴリ b には、2013 年 1 月 30 日の日付を持つ 2 つの行があります。カテゴリ c にも 2 つの行があります。

また、時間ではなく、アップロードの日付を比較する必要があります。読み込みには数秒かかることがあります。私は最大日付を使用しようとしていましたが、秒までしか取得できませんでした。

どんなガイダンス/考えも素晴らしいでしょう。

ありがとう!

編集:

これが私がこれまでにまとめたもので、近いと思いますが、まだ機能していません。これが最も効率的な方法であるとは思えません。

select 
    * 
from 
    VIEW c 
    INNER JOIN 
    ( 
        SELECT 
            Category, 
            MAX(CONVERT(DateTime, Convert(VarChar, UploadDate, 101))) as maxuploaddate  
        FROM 
            View 
        GROUP BY 
            Category, 
            UploadDate 
    ) temp ON temp.Category = c.Category AND CONVERT(VarChar, UploadDate, 101) = temp.maxuploaddate 

カテゴリとアップロード日のすべての組み合わせをまだ取得しているため、問題はネストされた選択されたステートメントにあります。最新の組み合わせを取得するだけで、Category と UploadDate を区別する方法はありますか?

再度、感謝します

4

3 に答える 3

1

クエリは近いです。グループ化に誤りがあります。また、日付の変換も取り除きます。日付の比較は正常に機能します。

select 
    * 
from 
    VIEW c 
    INNER JOIN 
    ( 
        SELECT 
            Category, 
            MAX(UploadDate) as maxuploaddate  
        FROM 
            View 
        GROUP BY 
            Category
    ) temp ON temp.Category = c.Category AND UploadDate = temp.maxuploaddate 
于 2013-02-01T14:09:26.773 に答える
0

OracleではRank()、これを実現するために使用できます。Rank()同じ基準が満たされた場合、重複する番号を作成します。

編集:そして、Trunc()を使用して、アップロード日から時間を「トリミング」することができます。

select *
from (select category, columna, columnb, uploaddate,
      rank() over ( partition by category order by trunc(uploaddate) desc) rank
      from view)
where rank = 1

Dense_Rank()重複する番号を作成しないものも存在します。したがって、これはここでは適用されません。違いの詳細については、この質問を参照してください。

于 2013-01-31T21:17:06.697 に答える