0

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

我想获得下一个 50 天生日的列表。但是这个列表必须是不同的,因为例如,如果接下来的 50 个生日都在同一天,我不想为 1 天创建 50 个提醒,我只想为所有这 50 个生日创建 1 个提醒。

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

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 可以帮助我解决这个问题!提前致谢!

4

1 回答 1

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
于 2014-01-31T19:28:10.180 回答