Sqlite查询 - Where(子查询)

时间:2014-01-31 19:05:57

标签: sqlite sql-subselect

目标: 我正在开发一款可以保存生日的Windows手机应用程序。但是Windows Phone不允许你保存超过50个提醒,所以我想要做的是:

我想获得下一个50个生日的清单 - DAYS。但是这个列表必须是截然不同的,因为如果例如接下来的50个生日都在同一天落下,我不想在1天内创建50个提醒,我只想为所有50个生日创建1个提醒。 / p>

这部分查询将创建下一个生日(如果生日已经过去,它将为明年创建一个生日)

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

如果我单独运行子查询,它会给我我正在寻找的结果:

2015-01-01
2015-01-02

如果我在没有得到的地方运行主查询:

id  type       details            Bday
1   11111      admin@sqlfiddle.com    2015-01-01
3   33333      admin@sqlfiddle.com    2015-01-01
2   22222      @sqlfiddle             2015-01-02
4   44444      @sqlfiddle             2015-01-02

但结合起来,我没有结果......

我制作了这个sqlfiddle:http://sqlfiddle.com/#!5/58849/6/0

我希望some1可以帮助我! 提前谢谢!

1 个答案:

答案 0 :(得分: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

要解决您的问题,请改为更改(在您的小提琴上提供两行结果):

{{1}}