Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
Mysql SQL查询-使用带_Mysql_Sql_Sql Server_Database_Oracle - Fatal编程技术网

Mysql SQL查询-使用带

Mysql SQL查询-使用带,mysql,sql,sql-server,database,oracle,Mysql,Sql,Sql Server,Database,Oracle,我是sql新手,我需要您的帮助。提前非常感谢您抽出时间 Locprog表格列出了程序在不同位置启动的日期。每个位置由唯一的LOC指示器标识 LOC PROG DATE_STARTED 121 P 10-JUL-95 131 P 11-JUL-95 141 P 18-APR-00 151 P 19-APR-00 161 P 26-MAY-06 171 P 28-MAY-06 181 P 30-APR-15 1

我是sql新手,我需要您的帮助。提前非常感谢您抽出时间

Locprog表格列出了程序在不同位置启动的日期。每个位置由唯一的LOC指示器标识

LOC PROG DATE_STARTED   
121   P     10-JUL-95
131   P     11-JUL-95
141   P     18-APR-00
151   P     19-APR-00
161   P     26-MAY-06
171   P     28-MAY-06
181   P     30-APR-15
191   P     31-APR-15
192   P     19-JAN-16
195   P     20-JAN-16
DTWK表给出了与特定日期关联的周数

D_IND       W_IND
09-JUL-95   199501
10-JUL-95   199502
11-JUL-95   199502
12-JUL-95   199502
13-JUL-95   199502
14-JUL-95   199502
15-JUL-95   199502
16-JUL-95   199502
17-JUL-95   199502
...        ...
18-APR-00   200005
19-APR-00   200005
26-MAY-06   200602
28-MAY-06   200602
30-APR-15   201504
31-APR-15   201504
19-JAN-16   201603
20-JAN-16   201603
问题:我想找出在200602周和201603周之间该计划处于活动状态的地点的数量

我试过了

 select count(*) from (
 select distinct A.LOC, A.Date_started, B.w_ind as wk from Locprog A, DTWK B 
 where a.date_started=B.d_ind) aa
 where aa.wk<=200602

DTWK表中有许多每周编号的记录。 以下查询给出了每周编号的开始日期和结束日期:

SELECT min( D_IND ) start_date,
       max( D_IND ) end_date
FROM DTWK d
WHERE d.W_IND between 200602 and 201603
GROUP BY W_IND
此查询的结果可以连接到LOC表以计算计数:

SELECT count( distinct loc )
FROM LOC l
JOIN (
    SELECT min( D_IND ) start_date,
           max( D_IND ) end_date
    FROM DTWK d
    WHERE d.W_IND between 200602 and 201603
    GROUP BY W_IND
) x
ON l.date_started between x.start_date and x.end_date
;

演示:

DTWK表中有许多周数的记录。 以下查询给出了每周编号的开始日期和结束日期:

SELECT min( D_IND ) start_date,
       max( D_IND ) end_date
FROM DTWK d
WHERE d.W_IND between 200602 and 201603
GROUP BY W_IND
此查询的结果可以连接到LOC表以计算计数:

SELECT count( distinct loc )
FROM LOC l
JOIN (
    SELECT min( D_IND ) start_date,
           max( D_IND ) end_date
    FROM DTWK d
    WHERE d.W_IND between 200602 and 201603
    GROUP BY W_IND
) x
ON l.date_started between x.start_date and x.end_date
;


演示:

尝试:从LOCPROG中选择COUNTLOC,其中日期从DTWK中选择,其中W_IND在200602和201603之间,按LOC分组;为什么aa.wk不在200602和201603之间?根据您的示例数据,它将是所需的输出?不清楚您为什么要使用mysql或oracle之类的比较运算符?您有两个标记:从LOCPROG中选择COUNTLOC,其中日期从DTWK中选择D_IND,其中W_IND在200602和201603之间,按LOC分组;为什么aa.wk不在200602和201603之间?根据您的示例数据,它将是所需的输出?不清楚您为什么要使用mysql或oracle之类的比较运算符?你有两个标签我想你是说谢谢Donnie-修好了!:请参阅我的编辑。我发现了另一个问题,假设我读对了他的表结构。顺便说一下,我不知道MySql,但是使用Oracle,你总是可以从日期中获取周数。你可以很容易地找到这是怎么回事。Donnie-你能描述一下你发现了什么问题吗?我想你的意思是谢谢Donnie-解决了它!:请参阅我的编辑。我发现了另一个问题,假设我读对了他的表结构。顺便说一下,我不知道MySql,但是使用Oracle,你总是可以从日期中获取周数。你可以很容易地找到这是怎么回事。Donnie-你能描述一下你发现了什么问题吗?dtwk似乎不太清楚。将199502与2016*进行比较。我的第一个假设是一周中每天有一个条目,但我不知道。@David Bachmann Jeppesen非常感谢您指出这一点-我错过了每周都有很多日期。我改变了我的答案,但问题仍然是一样的——在这两种情况下都应该有效。任何时候——尽管我删除了我的评论,因为我自己错过了一个细节。只有当您确信DTWK表包含所有日期或它包含LogProg表中的所有日期时,您的答案仍然有效,在这两种情况下,我的答案也有效。如果不能保证这一点,事情会变得更加复杂……谢谢@Kordirko!我对你的回答稍作修改就得到了要求的结果谢谢你@David的评论,时间工作似乎不一致。将199502与2016*进行比较。我的第一个假设是一周中每天有一个条目,但我不知道。@David Bachmann Jeppesen非常感谢您指出这一点-我错过了每周都有很多日期。我改变了我的答案,但问题仍然是一样的——在这两种情况下都应该有效。任何时候——尽管我删除了我的评论,因为我自己错过了一个细节。只有当您确信DTWK表包含所有日期或它包含LogProg表中的所有日期时,您的答案仍然有效,在这两种情况下,我的答案也有效。如果不能保证这一点,事情会变得更加复杂……谢谢@Kordirko!我对你的回答稍作修改就得到了要求的结果谢谢@David的评论和时间
SELECT count( distinct loc )
FROM LOC l
JOIN (
    SELECT min( D_IND ) start_date,
           max( D_IND ) end_date
    FROM DTWK d
    WHERE d.W_IND between 200602 and 201603
    GROUP BY W_IND
) x
ON l.date_started between x.start_date and x.end_date
;