2

テーブルORDERSがあり、フィールドがありDATE_ADD、日付形式は2010-02-28 20:48:09です。注文がなかった日付を調べる必要があります。私は試した

SELECT * FROM `orders` HAVING COUNT(date_add) < 1

しかし、いくつかあるはずですが、0の結果を返します。このクエリのどこが間違っていますか?

4

2 に答える 2

1

これを試して:

SELECT DATE(date_add), COUNT(date_add) AS cnt FROM `orders` GROUP BY DATE(date_add) HAVING COUNT(date_add) < 1
于 2013-06-22T10:25:35.567 に答える
0

テーブルに含まれていないordersデータについてテーブルをクエリすることはできません。または、別の言い方をすれば、利用可能なすべての日付のテーブルが必要です。カレンダー テーブルがある場合は、次のようなクエリを実行します。

select c.*
from calendar c left outer join
     (select distinct cast(date_add as date) as date_add
      from orders
     ) o
     on c.date = o.date_add
where o.date_add is null

注: 日付に変換する必要がありdate_addます (時間部分を削除します)。これはデータベースによって異なります。上記は SQL Server の構文です。また、date(date_add)(MySQL) やtrunc(date_add)(Oracle) などのようなものでもかまいません。

カレンダー テーブルがない場合、テーブルの作成はデータベース固有です。ほとんどすべての日付に注文がある場合は、次のようなトリックを実行できます。

select driver.dte
from (select dte
      from (select distinct cast(date_added + n.n as date) as dte
            from orders
           ) o cross join
           (select 0 as n union all select 1 as n union all select 2 as n
           )
     ) driver left outer join
     (select distinct cast(date_add as date) as date_add
      from orders
     ) o
     on driver.dte = o.date_add
where o.date_add is null
于 2013-06-22T11:23:28.680 に答える