我需要计算最后一天的日子,但是不知道该怎么做.
例如我得到这样的核心数据:
|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)的日期,直到今天,并获得了________,所以我可以算几天,这很容易.

但是如果我标记为second2-14 as isPresented = 1(如下表中所示),我将得到最后一个没有显示的是,2,但是不正确的是没有数据,此日期应为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或breakDate = 2016-02-14 – 我尝试这个,但我的解决方案错了,因为第二个表

对于第二个表:streak = 3或breakDate = 2016-02-13 – 无法弄清楚如何丢失日期

重要更新:
会有云同步数据,所以我没有看到任何解决方案在应用程序,真的需要找到缺少日期或isPresented = 0在coredata

附:我正在使用swift,如果你能帮助我通过迅速,这将是伟大的,但我也明白Obj-C.对不起,我的英文不好

解决方法

所有sql解决方案

请注意,这假设“今天”是计算条件的一​​天. sql返回连续条件的日期,以及在条纹开始之前的日期.

with max_zero_dt (zero_dt) as
(
  select max(dt)
    from ( 
         select max(isPresent) as isPresent,dt from check_tab group by dt
         union select 0,min(dt) from check_tab
         )
   where isPresent = 0
),days_to_check (isPresent,dt) as
(
  select isPresent,dt
    from check_tab ct
    join max_zero_dt on ( ct.dt >= zero_dt )
),missing_days (isPresent,dt) as
(
  select 0,date(dt,'-1 day') from days_to_check
  UNION
  select 0,date('Now')
),all_days_dups (isPresent,dt from days_to_check
  union
  select isPresent,dt from missing_days
),all_days (isPresent,dt) as
(
  select max(isPresent) as isPresent,dt
  from all_days_dups
  group by dt
)
select cast(min(julianday('Now') - julianday(dt)) as int) as day_streak,max(dt) as dt
  from all_days
 where isPresent = 0

这是第一个场景的sqlfiddle:http://sqlfiddle.com/#!7/0f781/2

这是第二种情况的一个sqlfiddle:http://sqlfiddle.com/#!7/155bb/2

关于fiddleS的注意事项:它们将日期相对于“Today”进行更改,以便准确测试条纹.

下面是它的工作原理:

>摘要:我们将使用零“填写”缺少的日子,然后进行简单的检查以查看最大0日期的时间.但是,如果今天没有行,并且没有行为零,我们必须考虑到.
> max_zero_dt:包含包含最新显式0日期或最早日期减去1天的单个行.这是为了减少稍后查询的行数.
> days_to_check:这是根据最新的0是什么时候减少的行数来检查.
> missing_days:我们需要填写缺少的日子,所以我们得到所有日子的列表减去1天.我们还添加今天,以防万一没有行.
> all_days_dups:我们简单地结合days_to_check和missing_days.
> all_days:在这里,我们每天都会获得’max’isPresent,所以现在我们有真实的搜索日期列表,知道isPresent不会有0的空白.
>最终查询:这是提供条纹和开始日期的简单计算.

假设:

>表名IS:check_tab>当前日期必须在表中为1.否则,条纹为0.如果不是这种情况,则可以修改查询.>如果isPresent的单日同时为0,则为1,则优先级为1,连续可以持续到前一天.>核心数据使用sqlite,而在sqlite中工作的上述sql也可以用于Core Data的数据库.

ios – 如何计算核心数据中的天数?的更多相关文章

  1. ios – NSDate得到上周,上个月的问题

    我需要从当前日期开始获得上一个礼拜.所以我找到了可以重新计算当前日期添加间隔的解决方案这个参数:[[NSDatedate]dateByAddingTimeInterval:-604800.0](前一周)[[NSDatedate]dateByAddingTimeInterval:-2629743.83](取得上个月)正如我想,为了让周,这种方法运行良好,没有任何问题,因为每周有七天,间隔没有改变.但

  2. swift - DateUtil

  3. android – 带有Coundown计时器的ListView.滚动列表视图时,计时器闪烁

    创建倒计时器实例和取消它时必须小心.如果您不取消计时器,它将更新错误的视图.

  4. php – 显示一系列天数

    假设我有这些数字数组,对应于一周中的天数:如何有效地将这些数组转换为所需的字符串,如C风格的注释所示?任何帮助将不胜感激.以下代码应该工作:

  5. php – Laravel模型范围activated_at和deactivated_at检查是否有7天的差异

    使用模型范围:我知道这是无效的语法,但认为我可能很清楚我想要实现的目标.‘activated_at’和’deactivated_at’是同一个表中的两个字段我希望得到它们相隔7天以上的所有实例我不确定有没有一种正确的方法可以通过Eloquent实现这一点,尽管你可以使用MysqL函数DATEDIFF.尝试类似:这取决于您使用的数据库驱动程序(即MysqL,sqlite,sql服务器……

  6. PHP日期不包括周末

    我目前正在建立一个网站,仅在周一至周五提供.我想弄清楚如何添加交货日期.例如:“今天订购,你可以期待DD/MM/YY交货”上述日期需要排除任何周末所以基本上如果今天订购,交货日是4个工作日后,不包括周末.试试这个逻辑.您可以根据需要进行修改.

  7. php – 使用DateInterval和DateTime :: add添加月份时会出现什么问题?

    问题是每个月可能有不同的天数.问题是,当您想将日期增加1个月时,您正在做什么.根据PHP文档,如果您在1月31日并且您添加1个月,那么预期的行为是什么?二月只有29天.你想成为这个月的最后一天吗?

  8. windows – 调用powershell.exe非常慢

    我有一台带有PowershellV4.0的Windows2008R2服务器我有一个非常简单的脚本test.ps1,内容如下:我从PowerShell提示符中调用此脚本,如下所示:你可以看到我的价值非常高:要么它占用我的cpu50%.为什么太长了?

  9. php – 从CodeIgniter中的post数组中获取数据

    好的,所以我有一个表单,它在POST数组中发送数组.我试着这样读:这不起作用.PHP说“意外”[‘“.为什么这不起作用?我通过这样做来修复它:我解决了我的问题,我只是好奇为什么第一种方式不起作用.PHP不支持从函数调用中解除数组.它是在PHP的SVN主干版本中实现的,因此它可能会成为PHP的未来版本.现在你将不得不诉诸你现在正在做的事情.对于枚举数组,您还可以使用list:见:http://php

  10. ios – Swift如何使用enum来获取字符串值

    ’如何使用枚举值将其作为字符串分配给标签文本?解决方法使用枚举的rawValue:

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部