Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server重叠日期_Sql_Sql Server_Date_Overlapping - Fatal编程技术网

SQL Server重叠日期

SQL Server重叠日期,sql,sql-server,date,overlapping,Sql,Sql Server,Date,Overlapping,我需要更新日历表的帮助。我有两个表,一个是事务表T,一个是日历表C。一旦日期可用,我将尝试使用应用程序id app_id和emp_id更新日历表,如果日期重叠,则不应更新。e、 g app_id emp_id stdate eddate priority ----------------------------------------------- 1 15 2015-01-03 2015-01-05 1 2 18

我需要更新日历表的帮助。我有两个表,一个是事务表T,一个是日历表C。一旦日期可用,我将尝试使用应用程序id app_id和emp_id更新日历表,如果日期重叠,则不应更新。e、 g

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
表T

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
表C

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
dates        app_id    empid
----------------------------
2015-01-03     null    null
2015-01-04     null    null
2015-01-05     null    null
dates        app_id    empid
----------------------------
2015-01-03     1        15
2015-01-04     1        15
2015-01-05     1        15
运行更新后,结果应为

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
表C

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
dates        app_id    empid
----------------------------
2015-01-03     null    null
2015-01-04     null    null
2015-01-05     null    null
dates        app_id    empid
----------------------------
2015-01-03     1        15
2015-01-04     1        15
2015-01-05     1        15

我在脑海中写下了这句话,我希望它对你有用:

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
UPDATE TC
SET app_id = (SELECT TOP 1 app_id FROM TABLE_T TT WHERE TC.dates BETWEEN TT.stdate AND tt.eddate ORDER BY TT.priority ASC),
empid = (SELECT TOP 1 emp_id FROM TABLE_T TT WHERE TC.dates BETWEEN TT.stdate AND tt.eddate ORDER BY TT.priority ASC)
FROM TABLE_C TC
您可以首先使用此查询调试此问题:

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2
SELECT TC.*,
new_app_id = (SELECT TOP 1 app_id FROM TABLE_T TT WHERE TC.dates BETWEEN TT.stdate AND tt.eddate ORDER BY TT.priority ASC),
new_empid = (SELECT TOP 1 emp_id FROM TABLE_T TT WHERE TC.dates BETWEEN TT.stdate AND tt.eddate ORDER BY TT.priority ASC)
FROM TABLE_C TC

我在您的示例中使用了emp_id和empid。

我倾向于使用apply:

app_id  emp_id stdate      eddate      priority 
-----------------------------------------------     
1       15     2015-01-03  2015-01-05   1
2       18     2015-01-04  2015-01-06   2

假设表T中的日期不能重叠,这是C.dates>=T.stdate和C.dates上的简单联接。您需要应用程序id和emp\U id吗?它们都是表T的PK吗?还是仅仅是前者?我猜2015-01-06将有2个18,对吗?是的,我需要应用程序id和emp_id,它们在表TDid中是pk。有任何答案适合你吗?