sql查询 连续日期。问题 比较绕脑。大侠给看看

来源:百度知道 编辑:UC知道 时间:2024/05/15 02:56:59
现在有张表 :
姓名 任职日期 结束任职日期 任职年数 任职
张三 2001-10-13 2004-10-13 3 书记
张三 2003-10-1 2004-11-13 1 主任
李四 2001-10-13 2004-10-13 3 书记
李四 2004-10-13 2007-10-13 3 主任

我现在想查询 出 任书记和主任 连续任职年数大于3年的(连续任职 是任职开始时间 在 上一次任职时间段之间的算为连续任职)
查询结果如下:
1.张三
2.李四
或者更复杂点的
姓名 任职年总数 详细记录
2001-10-13 2004-10-13 3 书记
张三 3
2003-10-1 2004-11-13 1 主任
---------------------------------------
2001-10-13 2004-10-13 3 书记
李四 6
2004-10-13 2007-10-13 3 主任

有什么好的思路吗?用winform C#的dataGridView1做
1.sql语句怎么查询吗
2.如果不好查询怎么 处理啊? 思路
谢谢

--结果符合
--LZ应该是用的Sqlserver吧 我也用的Sqlserver
--你要的结果用T-Sql语句实现,希望对你有帮助
--生成测试数据
CREATE TABLE TestA
(
FName nvarchar(20),
FStartDate smalldatetime,
FEndDate smalldatetime,
FWorkYear int,
FJob nvarchar(20)
)
INSERT INTO TestA
SELECT '张三','2001-10-13','2004-10-13',3,'书记'
UNION ALL
SELECT '张三','2003-10-1','2004-11-13',1,'主任'
UNION ALL
SELECT '李四','2001-10-13','2004-10-13',3,'书记'
UNION ALL
SELECT '李四','2004-10-13','2007-10-13',3,'主任'

--第一个问题,连续任职2个条件:1,必须任职过2次以上岗位,也就是具有2条记录;2,任职总时间大于等于3年
SELECT FName,FWorkYear
FROM (
SELECT FName,SUM(DATEDIFF(m,FStartDate,FEndDate))/12 AS FWorkYear
FROM TestA
GROUP BY FName
HAVING COUNT(FName)>1
)AS T
WHERE FWorkYear >=3
--第二个问题,实现明细显示
--1