找到特定记录的两个部分 [英] Two Parts on finding specific records

查看:69
本文介绍了找到特定记录的两个部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

地狱全部



如何使用SQL查找几件事情?



这是我的基本表格

日期Tom 
09-Mar-14 1
10-Mar-14 1
11-Mar- 14 1
12-Mar-14 0
13-Mar-14 0
14-Mar-14 1
15-Mar-14 0
16-Mar- 14 1
17-Mar-14 1
18-Mar-14 1
19-Mar-14 0
20-Mar-14 1
21-Mar- 14 1
22-Mar-14 1
23-Mar-14 0
24-Mar-14 1
25-Mar-14
26-Mar-14
27-Mar-14
28-Mar-14
29-Mar-14
30-Mar-14
31-Mar-14
01 -Apr-14
02-Apr-14
03-Apr-14
04-Apr-14
05-Apr-14





今天我们有GETDATE()返回日期24-Mar-14。

1代表一个工作日

0代表休息日



现在我有两个问题。



1.有没有办法使用GETDATE()并计算关闭的天数,所以将0作为变量向后计数。我们用4天吧。因此它从GETDATE()中计算4个零,这将返回13-Mar-14。



2.然后我想使用另外一个增加10个工作日的变量,无论是否工作,从GETDATE() - 4(0)(13-Mar-14) )。因此,从3月13日至14日,实际工作日和潜在工作日的未来将增加10天,即26-Mar-14。还必须有一种方法来使用特定的日期,而不是总是使用GETDATE()。



我知道这有点奇怪但我正在做一些审计按时工作和未来的潜在工作日。有趣的是,工作日有很多规则,我希望如果我能通过一些帮助解决这个问题,我将能够修改它来解决其他问题。



无论如何,任何帮助都会非常感激。



谢谢



迈克

解决方案

这是针对问题1,使用单个CTE:

  WITH  CTE1(行,日期,tom)
AS

SELECT ROW_NUMBER() OVER ORDER BY date DESC AS 行,
date ,tom FROM table1 W. HERE tom = 0 AND date < ' 2014年3月24日'

SELECT date FROM CTE1 WHERE row = 4





和问题2,需要多个CTE:

  WITH  CTE0(行,日期,tom)
AS

SELECT ROW_NUMBER () OVER ORDER BY date DESC AS 行,
date ,tom FROM table1 WHERE tom = 0 AND date < ' 24-Mar-14'
),
CTE1( date ,tom)
AS

SELECT date ,tom FROM table1 WHERE tom = 1 tom IS NULL
),
CTE2(var)
AS

SELECT TOP 10 CTE1。 date FROM CTE1 WHERE
CTE1。 date >( SELECT 日期 FROM CTE0 WHERE row = 4 ORDER BY date ASC
SELECT MAX(var) FROM CTE2


Hell All

How do I use SQL to find out a couple of things?

Here's my basic table

Date    	Tom
09-Mar-14	1
10-Mar-14	1
11-Mar-14	1
12-Mar-14	0
13-Mar-14	0
14-Mar-14	1
15-Mar-14	0
16-Mar-14	1
17-Mar-14	1
18-Mar-14	1
19-Mar-14	0
20-Mar-14	1
21-Mar-14	1
22-Mar-14	1
23-Mar-14	0
24-Mar-14	1
25-Mar-14	
26-Mar-14	
27-Mar-14	
28-Mar-14	
29-Mar-14	
30-Mar-14	
31-Mar-14	
01-Apr-14	
02-Apr-14	
03-Apr-14	
04-Apr-14	
05-Apr-14	



We have GETDATE() returning todays date 24-Mar-14.
1 represents a work day
0 represents an off day

Right now I have two questions.

1. Is there a way using GETDATE() and count the number of days off, so counting the 0's backwards as a variable. Let's use 4 days. So that it counts 4 zeros from GETDATE() which would return 13-Mar-14.

2. Then I want to use another variable of adding 10 working days whether worked or not from the GETDATE() - 4(0s) (13-Mar-14). So from 13-Mar-14 adding 10 days into the future of actually worked days and potential working days would be 26-Mar-14. There must also be a way to use specific dates instead of always using GETDATE().

I know it's a bit of an odd thing but I'm doing some auditing on time worked and future potential working days. The funny thing is that there are so many rules to working days that I'm hoping that if I can figure this out with some help I'll be able to modify it to figure other problems.

Anyways, any help would be much appreciated.

Thanks

Mike

解决方案

This is for question 1, use single CTE:

WITH CTE1 (row, date, tom)
AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY date DESC) AS row,
        date, tom FROM table1 WHERE tom = 0 AND date < '24-Mar-2014'
)
SELECT date FROM CTE1 WHERE row = 4



and question 2, need multiple CTEs:

WITH CTE0 (row, date, tom)
AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY date DESC) AS row,
        date, tom FROM table1 WHERE tom = 0 AND date < '24-Mar-14'
),
CTE1 (date, tom)
AS
(
    SELECT date, tom FROM table1 WHERE tom = 1 OR tom IS NULL
),
CTE2 (var)
AS
(
     SELECT TOP 10 CTE1.date FROM CTE1 WHERE
      CTE1.date > (SELECT date FROM CTE0 WHERE row = 4)  ORDER BY date ASC
) SELECT MAX(var) FROM CTE2


这篇关于找到特定记录的两个部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆