1

2つのテーブルがあります。

地図

 Product    Channel  Date   Advt Time 
Air    Pix  30-04-2011  22:23:16
Air    Pix  30-04-2011  23:55:08

MBA

 Product    Channel Date    StartTime EndTime 
Air    Pix  30-04-2011  22:00:00   01:00:00
Air    Pix  30-04-2011  23:00:00   02:00:00

MAPのAdvtTimeがMBAテーブルのStartTimeとEndTimeの間にあるかどうかを確認する必要があります。

以下のクエリを使用しました

select distinct * 
from MAP 
inner join MBA on (MAP.Channel     = MBA.Channel 
                   and MAP.Product = MBA.Product 
                   and MAP.ProgDate=MBA.ProgDate) 
where AdvtTime between ti and tii
order by Channel asc

しかし、終了時間は翌日まで延長されるため、結果は得られません。plsはさらに進む方法について私を助けます。

が欲しいです:

  • 22:23:16に一致22:00:00する01:00:00、および
  • 23:55:08に一致23:00:0002:00:00ます。
4

3 に答える 3

0


select distinct * 
from MAP 
inner join MBA on (MAP.Channel     = MBA.Channel 
                   and MAP.Product = MBA.Product 
                   and MAP.ProgDate=MBA.ProgDate) 
where (AdvtTime between ti and tii) or (AdvTime between ti and DATEADD(hh, DATEDIFF(HH,AdvTime, tii),tii))
order by Channel asc

于 2013-03-17T08:04:45.453 に答える
0

次のクエリはあなたが望む答えを与えるはずです:

SELECT DISTINCT *
FROM MAP
INNER JOIN MBA
ON MAP.Channel = MBA.Channel
AND MAP.Product = MBA.Product
WHERE (MAP.Date = MBA.Progdate
       AND AdvtTime >= StartTime
       AND (AdvtTime <= EndTime OR EndTime < StartTime))
      OR
      (MAP.Date = dateadd(DAY,1,MBA.ProgDate) -- extended from yesterday
       AND EndTime < StartTime                -- iff EndTime < StartTime
       AND AdvtTime <= EndTime)
ORDER BY MBA.Channel ASC

テストするには、 http://www.sqlfiddle.com/#!6 / 1e49f/1/0を参照してください。

ただし、日付と時刻を日時フィールドに結合し、プレゼンテーションの目的で必要に応じて個別の部分を抽出することをお勧めします。

于 2013-03-17T10:02:23.467 に答える
0

また、このオプションは単純なJOINで使用できます

SELECT DISTINCT *
FROM dbo.map m JOIN dbo.mba m2 ON m.Product = m2.Product
                                 AND m.Channel = m2.Channel
                                 AND m.[Date] = m2.[Date]
                                 AND (m.[Advt Time] > m2.[StartTime] AND m2.[StartTime] > m2.[EndTime] 
                                   OR  m.[Advt Time] BETWEEN m2.[StartTime] AND m2.[EndTime])  

SQLFiddleのデモ

于 2013-03-17T11:10:49.593 に答える