3

私はテーブルを持っています。それをtable1と呼びましょう。次のフィールドとデータを使用

msgid  msisdn teaserid send
1      333     1        1
2      333     1        0
3      444     2        1
4      444     2        1
5      444     3        1

同じmsisdn、teaseridを持つすべての単一レコードに対してsend=1であるmsgidを返すクエリが必要です。上記の場合、結果としてmsgid:3,4,5が必要です。これはmssqlクエリを使用してどのように行うことができますか?

4

2 に答える 2

2

これはウィンドウ関数のかわいい使い方です:

declare @t table (msgid int,msisdn int,teaserid int,send int)
insert into @t (msgid,msisdn,teaserid,send) values
(1,333,1,1),
(2,333,1,0),
(3,444,2,1),
(4,444,2,1),
(5,444,3,1)

select * from (
select *,MIN(send) OVER (PARTITION BY msisdn,teaserid) as all1
from @t
)t
where all1 = 1

結果:

msgid       msisdn      teaserid    send        all1
----------- ----------- ----------- ----------- -----------
3           444         2           1           1
4           444         2           1           1
5           444         3           1           1

パーティションMIN(send)全体を計算することにより、すべての値が1の場合、これは1になります。1つの行だけに0がある場合、それがそのパーティションの最小値になります。msisdn,teaseridsend

于 2013-01-25T07:14:53.927 に答える
1

このクエリを使用して結果を取得できます

 select msgid 
 from table1 t 
 where send=1 
       and exists(select * from table
                  where send=1 
                  and msisdn=t.msisdn
                  and teaserid=t.teaserid and msgid != t.msgid)
于 2013-01-25T06:59:40.980 に答える