0

これが私がやろうとしていることです。

IDに対してコードが複数回発生したDISTINCT日付の数をカウントします。

ex:
id,site,code,date
1,01,A,08/20/2012
2,01,A,08/21/2012
1,01,A,08/20/2012

これが私がどのように見えるかと思いますが、明らかに間違っています...私が意味をなさない場合は私に知らせてください。これを調べてくれてありがとう

SELECT 
id,
site,
code,
(select count(distinct date)
  from table b
  where code = 'A' and b.id = a.id and count(distinct date) > 2) subquery
from table a


result goal:
1,01,A,1
2,01,A,0 or null
4

3 に答える 3

1
select "id", "site", "code", 
    count(distinct "date") - 1 as AdditionalDistinctDateCount
from MyTable
group by "id", "site", "code", "date"

SQL フィドルの例

于 2012-09-05T15:58:23.577 に答える
0

ID と日付で集計し、ID で再度集計するサブクエリを使用してこれに取り組みます。

select t.*, tsum.numTwiceOrMore
from (select distinct id, site, code
      from t
     ) t join
     (select id, sum(case when cnt > 1 then 1 else 0 end) as numTwiceOrMore
      from (select id, date, count(*) as cnt
            from t
            group by id, date
           ) tsum
      group by id
     ) tsum
     on t.id = tsum.id
于 2012-09-05T15:57:45.843 に答える
0

where集計を計算するクエリの句で集計を参照することはできません。しかし、それがhaving条項の目的です。

SELECT id, site, code,
    (select count(distinct date)
    from table b
    where code = 'A' and b.id = a.id
    having count(distinct date) > 2) subquery
from table a;

ただし、これで目的が達成されるとは思わないでください。1日以上のエントリがある行全体を表示するかid(およびsite、および、どの基準を使用していますか?)、または日付のカウントのみを表示するかは明確ではありません。code


OK、あなたの言いたいことは理解できたと思います...おそらくどのサイトでも、が に対して複数回出現する場合にのみ、日付の数を表示したいですか? これには分析関数を使用できます。CTE を使用して、例として指定したデータを取得します。codeid

with t as (
    select 1 as id, '01' as site, 'A' as code, date '2012-08-20' dt from dual
    union all select 2, '01', 'A', date '2012-08-21' from dual
    union all select 1, '01', 'A', date '2012-08-20' from dual
)
SELECT distinct id, site, code,
    case when code_count_for_id > 1 then dt_count else null end as dates
FROM (
    SELECT id, site, code, dt,
        count(distinct dt) over (partition by id, code) dt_count,
        count(*) over (partition by id, code) as code_count_for_id
    FROM t
)
ORDER BY id, code;

        ID SI C      DATES
---------- -- - ----------
         1 01 A          1
         2 01 A

したがって、内側のクエリでは、 はandの組み合わせdt_countの個別の日付の数として計算され、組み合わせが出現する回数として計算されます。idcodecode_count_for_id

次に、外側のクエリで、 の値に応じて、またはcaseを表示するかどうかを決定します。dt_countnullcode_count_for_id

于 2012-09-05T15:58:35.907 に答える