目标: 我正在开发一款可以保存生日的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可以帮助我! 提前谢谢!
答案 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}}