Mysql SQL查询-使用带
我是sql新手,我需要您的帮助。提前非常感谢您抽出时间 Locprog表格列出了程序在不同位置启动的日期。每个位置由唯一的LOC指示器标识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
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
;