2016-11-10 1 views
0

有効な開始日と終了日を含むイベントに関する情報を格納する 'Events'という表があります。このイベントは、時間の経過と共に何度も発生する可能性があります。特定のイベントが現在有効な場合は、そのイベントのすべてのレコードを除外する必要があります。下の私の例では、今日の日付ではアクティブではない唯一のイベントです(今日は10/11/16と書いてあります)ので、「オリンピック」の単一の値を返したいだけです。1つのオカレンスが現在有効な場合、すべてのレコードを除外します。

 
╔═══════════╦════════════╦════════════╗ 
║ Event ║ Start ║ End  ║ 
╠═══════════╬════════════╬════════════╣ 
║ World Cup ║ 1/07/2016 ║ 15/07/2016 ║ 
║ Olympics ║ 15/08/2016 ║ 25/08/2016 ║ 
║ World Cup ║ 1/09/2016 ║ 15/09/2016 ║ 
║ Olympics ║ 15/09/2016 ║ 25/09/2016 ║ 
║ Olympics ║ 15/10/2016 ║ 25/10/2016 ║ 
║ World Cup ║ 1/11/2016 ║ 15/11/2016 ║ 
║ World Cup ║ 1/12/2016 ║ 15/12/2016 ║ 
╚═══════════╩════════════╩════════════╝ 

答えて

1
SELECT distinct Event 
FROM tableName WHERE Event NOT IN (SELECT Event 
            FROM tableName 
            WHERE CONVERT(VARCHAR(11),GETDATE(),103) BETWEEN StartDate AND EndDate 
           ) 
+0

これは、重複したレコードを返します:

この

は、私はあなたが提供されたデータに基づいて得た出力です。 –

+0

別名を使用すると問題が解決します –

1

これはトリックを行う必要があります。

SELECT DISTINCT event 
FROM table 
WHERE NOT EXISTS (
    SELECT 1 
    FROM table 
    WHERE GETDATE() >= start 
    AND GETDATE()<= end 
) 
0

それはあなたが望むことを答える仕事となります、これを試してみてください:今日の日付にアクティブではありません 唯一のイベント:出力は「オリンピック」

SELECT Top 1 [Event] FROM Events WHERE CONVERT(VARCHAR(11),GETDATE(),103) 
NOT BETWEEN [Start] AND [End] 
0

あるこの1つはMySQLを使用して私のために働きましたいくつかのマクロを変更し、SQLサーバーでも同じように動作するはずです。

あなたのようなものになるだろうマクロの変換
SELECT event,count(event) 
FROM table_name 
WHERE event NOT IN (
    SELECT event 
    FROM table_name 
    WHERE start <= NOW() AND end >= NOW() 
    GROUP BY event 
); 

:(テストしていない)を

SELECT event,count(event) 
FROM table_name 
WHERE event NOT IN (
    SELECT event 
    FROM table_name 
    WHERE start <= GETDATE() AND end >= GETDATE() 
    GROUP BY event 
); 

これはまた、あなたのカウントを与えますが、あなたは,count(event)一部を除去することができます。

+----------+--------------+ 
| event | count(event) | 
+----------+--------------+ 
| Olympics |   3 | 
+----------+--------------+ 
関連する問題