5

「日付」列を持つテーブルがあります。各日付は複数回表示される場合があります。出現回数が k 回未満の日付のみを選択するにはどうすればよいですか?

4

8 に答える 8

8
SELECT * FROM [MyTable] WHERE [Date] IN
(
    SELECT [Date] 
    FROM [MyTable] 
    GROUP By [Date] 
    HAVING COUNT(*) < @Max
)

@[SQLMenace] の応答も参照してください。これと非常に似ていますが、データベースによっては、オプティマイザーが違いを無意味にしないと仮定すると、彼の JOIN はおそらくより高速に実行されます。

于 2008-09-19T19:53:22.740 に答える
6
select dates 
  from table t 
 group by dates having count(dates) < k ;

うまくいけば、それは ORACLE で動作します。HTH

于 2008-09-19T19:55:45.057 に答える
3

COUNT 集計を使用します。

SELECT Date
FROM SomeTable
GROUP BY Date
HAVING COUNT(*) < @k
于 2008-09-19T19:54:46.637 に答える
2

"appears x times" クエリの場合、HAVING 句を使用するのが最適です。あなたの場合、クエリは次のようになります。

SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k

または、日付以外の他の列を選択する必要がある場合:

SELECT * FROM Table WHERE Date IN (
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k)

IN を INNER JOIN に書き換えることもできますが、実際にはクエリ オプティマイザーがほとんどの RDBMS でこれを行うため、パフォーマンスは向上しません。Date にインデックスを設定すると、このクエリのパフォーマンスが確実に向上します。

于 2008-09-19T19:54:48.883 に答える
2

DECLARE @Max int
SELECT @Max =  5

SELECT t1.* 
FROM [MyTable] t1 
JOIN(
    SELECT [Date] 
    FROM [MyTable] 
    GROUP By [Date] 
    HAVING COUNT(*) < @Max
) t2 on t1.[Date]  = t2.[Date] 
于 2008-09-19T19:56:17.317 に答える
1
SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k

そして、元のデータを取り戻すには:

SELECT table.*
FROM table
INNER JOIN (
  SELECT date, COUNT(date) 
  FROM table
  GROUP BY date
  HAVING COUNT(date) < k) dates ON table.date = dates.date
于 2008-09-19T19:54:56.307 に答える
1

Oracle を使用していると仮定すると、k = 5:-

select date_col,count(*)
from your_table
group by date_col
having count(*) < 5;

日付列にも時間が入力されていて、それを無視したい場合は、クエリを次のように変更します。

select trunc(date_col) as date_col,count(*)
from your_table
group by trunc(date_col)
having count(*) < 5;
于 2008-09-19T19:55:10.347 に答える
0

日付に時間が含まれている場合、日付フィールドで直接カウントできない場合があります。最初に年/月/日の形式に変換してから、それを考慮に入れる必要がある場合があります。

そうしないと、通常、まったく同じ時刻のレコードがほとんどないため、カウントがオフになります。

于 2008-09-22T15:06:36.087 に答える