2014-01-31 1 views
0

Цель: Я работаю над приложением Windows Phone, которое позволяет вам сохранить дни рождения. Но Windows-телефон не позволяет вам сохранять более 50 напоминаний, поэтому я пытаюсь сделать так:Sqlite query - Where In (subquery)

Я хочу получить список из следующих 50 дней рождения-ДНИ. Но этот список должен быть разным, потому что, если, например, следующие 50 дней рождения все выпадают в тот же день, я не хочу создавать 50 напоминаний в течение 1 дня, я просто хочу создать 1 напоминание для всех этих 50 дней рождения.

Эта часть запроса создаст следующий день рождения (если день рождения уже прошел, это создаст день рождения на следующий год)

CASE WHEN strftime('%m-%d', Bday) < strftime('%m-%d', 'now') 
THEN strftime('2015-%m-%d', Bday) 
ELSE strftime('2014-%m-%d', Bday) 
END AS Bday 

Так что это мой полный запрос, который не работает ...:

SELECT id, type, details, 
       CASE WHEN strftime('%m-%d', Bday) < strftime('%m-%d', 'now') 
       THEN strftime('2015-%m-%d', Bday) 
       ELSE strftime('2014-%m-%d', Bday) 
       END AS Bday 
FROM Birthday 
WHERE Bday IN 
     (SELECT DISTINCT 
     CASE WHEN strftime('%m-%d', Bday) < strftime('%m-%d', 'now') 
     THEN strftime('2015-%m-%d', Bday) 
     ELSE strftime('2014-%m-%d', Bday) 
     END AS nextBday 
     FROM Birthday 
     ORDER BY nextBday 
     LIMIT 50) 
ORDER BY Bday 

Если я бегу подзапрос seperatly, он дает мне результаты, я ищу:

2015-01-01 
2015-01-02 

Если я запускаю главный запрос без где я получаю:

id type  details   Bday 
1 11111  [email protected] 2015-01-01 
3 33333  [email protected] 2015-01-01 
2 22222  @sqlfiddle    2015-01-02 
4 44444  @sqlfiddle    2015-01-02 

Но вместе, я получаю никаких результатов ...

Я сделал это sqlfiddle: http://sqlfiddle.com/#!5/58849/6/0

Я надеюсь, что some1 может мне помочь с этим! Спасибо заранее!

ответ

0

Вы пытаетесь переименовать поле в своем предложении AS. Поле BDay в вашем предложении WHERE ссылается на bday в определении вашей таблицы, а не на то, что указано в вашем предложении SELECT.

Чтобы устранить проблему, изменение этого вместо (дает два ряда результатов на вашей скрипке):

SELECT id, type, details, 
CASE WHEN strftime('%m-%d', Bday) < strftime('%m-%d', 'now') 
THEN strftime('2015-%m-%d', Bday) 
ELSE strftime('2014-%m-%d', Bday) 
END AS FBDay 
FROM Birthday 
WHERE FBDay IN 
(SELECT DISTINCT 
    CASE WHEN strftime('%m-%d', Bday) < strftime('%m-%d', 'now') 
    THEN strftime('2015-%m-%d', Bday) 
    ELSE strftime('2014-%m-%d', Bday) 
    END AS nextBday 
    FROM Birthday 
    ORDER BY nextBday 
    LIMIT 1) 
ORDER BY Bday 
+0

Going, чтобы проверить это завтра, но заранее спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^