我有一个包含作业列表的数据库;例如,它可能是CV中以前工作经历的列表。 我想知道一个人被雇用多少天;所以,我写了这个查询:查找一系列日期间隔的总持续时间
SELECT sum(datediff(dd,isnull(date_begin,getdate()),isnull(date_end,getdate()))+1)
FROM jobs
WHERE person_id=X
问题是,有时这些日期重叠。例如:
person date_from date_to Comment
John 01-Jan-2011 31-Dec-2012 Two years working at ABC
John 01-Jan-2012 31-Dec-2013 Two years of extra work at evening
在这种情况下我的查询将返回4年,但我想只有3返回换句话说,如果一个人有2个职位的一年,我希望它算作1年,不是2年。重叠的工作可能是任何数字,而不仅仅是2. 我试图通过减去所有重叠的总持续时间来调整查询,这对于2个重叠的工作很合适,但如果有更多的工作,这将失败。
虽然解决方案可以是任何语言,但我的计划是创建一个SQL函数,所以我更喜欢纯SQL。 –
你使用哪个sql引擎? MySQL的? SQL Server?仅在sql中可能会很复杂。 – csg
SQL Server 2008 r2 –