我需要计算最后一个连续天数,但不知道该怎么做。例如,我得到了这样的核心数据:
|id| isPresent(Bool)| date(NSDate)|
|==|================|=============|
| 1| 0| 2016-02-11 |
| 2| 1| 2016-02-11 |
| 3| 1| 2016-02-12 |
| 4| 0| 2016-02-14 |
| 5| 1| 2016-02-15 |
| 6| 1| 2016-02-16 |
| 7| 1| 2016-02-16 |
我试着检查最后一次未呈现(isPresent = 0)日期直到今天,并得到2016-02-14 -这样我就可以计算天数,这很容易。
但是,如果我将2016-02-14标记为isPresented = 1(如下表所示),我将获得最后一个未呈现日期2016-02-11 -但这是不正确的,没有2016-02-13的数据,因此该日期的isPresented应为0,连续记录应从该日期开始计数
|id| isPresent(Bool)| date(NSDate)|
|==|================|=============|
| 1| 0| 2016-02-11 |
| 2| 1| 2016-02-11 |
| 3| 1| 2016-02-12 |
| 4| 1| 2016-02-14 |
| 5| 1| 2016-02-15 |
| 6| 1| 2016-02-16 |
| 7| 1| 2016-02-16 |
我搜索了不同的算法条纹或sql reuests失踪的日期(sql server displaying missing dates),但不能想出如何使用它在核心数据。
我在想另一个数据,将保持条纹和更新,每次当用户打开应用程序,但得到同样的问题,如果用户没有打开应用程序。
**输出:**我需要找到的只是计数的天数或日期时,它打破,所以
对于第一个表:streak = 2 or breakDate = 2016-02-14 -我尝试了这个方法,但是我的解决方案错了,因为第二个表
对于第二个表:条纹= 3或中断日期= 2016-02-13 -无法确定如何获取缺失日期
**重要更新:**将有云同步数据,因此我在应用程序中看不到任何解决方案,确实需要在核心数据中找到缺失的日期或isPresented = 0
**p.s.**我正在使用swift,如果你能通过swift帮助我,那就太好了,但我也懂Obj-C。很抱歉我的英语不好
3条答案
按热度按时间lvmkulzt1#
根据你的问题,我猜你有一个带有NSDate对象的项目实体。下面是一些代码,你可以用它来完成。
我把调用放在
viewDidLoad
中,但是如果你愿意,你可以把它添加到一个按钮上。jckbn6z72#
所有SQL解决方案
请注意,这是假设“今天”在计算的连续记录中计为一天。SQL会传回以天数表示的连续记录,以及连续记录开始之前的日期。
下面是第一个场景的sqlfiddle:http://sqlfiddle.com/#!7/0f781/2
下面是第二个场景的sqlfiddle:http://sqlfiddle.com/#!7/155bb/2
关于小提琴的注意事项:他们将日期更改为相对于“今天”的日期,以便它准确地测试连胜。
下面是它的工作原理:
假设:
xzv2uavs3#