5

私は以下のようなテーブルを持っています

ID   Date  
1    Null  
1    Null  
1    Null  
1    02/02/2012  
1    02/03/2012  
1    02/04/2012  
1    02/05/2012  

上記の表から最小の日付を取得したいのですが、その結果は次のようになります。Null

私は書き込もうとしていました

select min(date), Id from Table group by ID

結果はです02/02/2012が、私は欲しいですNull

以下の方法を除いて、上記のテーブルからNull値をプルする他の方法はありますか?

select top 1 date, ID from table order by date asc
4

4 に答える 4

5

dbmsがSQL-Serverであると仮定します。

グループ化するidが、とにかくすべてのフィールドを選択する場合は、ctewithROW_NUMBER関数を使用できます。

WITH cte AS(
  SELECT x.*
  , RN=ROW_NUMBER()OVER(Partition By id Order By date)
  FROM Table x
)
SELECT * FROM cte 
WHERE RN=1

http://sqlfiddle.com/#!3/cc2a4/7

于 2012-06-15T15:01:43.790 に答える
3

デフォルトでは、関数MAXおよびMINは、データの評価でNULLをカウントしません。

この方法で試してください、トリックを行う必要があります:

SELECT 
CASE WHEN MIN(COALESCE(Date, '19001231')) = '19001231' THEN NULL ELSE MIN(Date) END AS Date,
Id 
FROM X 
group by ID
于 2012-06-15T14:56:59.743 に答える
0

それらのいくつかは答えを与えられていると思います。しかし、最終結果は以下のクエリで機能します

SELECT CASE WHEN   MIN(coalesce(date, '1900-01-01')) = '1900-01-01' THEN NULL ELSE MIN(date) END AS Date, ID
FROM table
GROUP BY ID
于 2012-06-15T15:10:00.827 に答える
0

'NULL'の簡単なチェックを行うこともできます。与えられたスキーマ/クエリの例では「ID」は無意味に見えるため、例では「ID」を返しませんでした。

    IF (EXISTS(SELECT TOP 1 * FROM x WHERE date IS NULL)) SELECT NULL AS MinDate
    ELSE SELECT MIN(date) AS MinDate FROM x;

http://sqlfiddle.com/#!3/d5fca/11

于 2012-06-15T21:20:58.297 に答える