我有一个新的week_table -
起始日期END_DATE weekno
---------------------------------------- ------
1996-01-01 1996年1月5日1
1996年1月8日1996年1月12日2
1996年1月15日1996年1月19日3
1996年1月22日1996年1月26日4
“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“” “”“”“”“”“”“”“”直到
1998年12月21日1998年12月26日156
我正在尝试提取组中5周的记录。我正在看结果如
起始日期END_DATE weekno_start weekno_end
--------------------------------------- -------
1996-01-01 1996年2月2日1 5
1996年2月5日1996年3月8日6 10
1996年3月11日1996年4月12日11月16日
我确实得到了结果,但是周数字一直在数据库中的最大周数运行。对于在weekno 156上的记录,我获得了具有空值的行。
如何避免使用null的记录并将视图限制为最大周数
我目前的代码是 -
SELECT (t1.weekno * 5) - 4 AS start_id
,t3.start_date
,t4.end_date
,(t1.weekno * 5) AS end_id
FROM weekcon_table t1
LEFT JOIN weekcon_table t2 ON (t2.weekno = t1.weekno * 5)
LEFT JOIN weekcon_table t3 ON (t3.weekno = (t1.weekno * 5) - 4)
LEFT JOIN weekcon_table t4 ON (t4.weekno = (t1.weekno * 5))
答案 0 :(得分:1)
你有没有试过这样的事情:
select min(weekno) as `start_id`,
min(start_date) as `start_date`,
max(end_date) as `end_date`,
min(weekno) as `weekno_start`,
max(weekno) as `weekno_end`
from weekcon_table
group by ((weekno - 1) DIV 5)
order by ((weekno - 1) DIV 5) asc
这是输出:
start_id start_date end_date weekno_start weekno_end
1 01/01/1996 26/01/1996 1 5
6 04/03/1996 24/02/1996 6 10
11 01/04/1996 30/03/1996 11 15
16 06/05/1996 27/04/1996 16 20
21 03/06/1996 25/05/1996 21 23
Record Count: 5; Execution Time: 1ms View Execution Plan link
答案 1 :(得分:0)
我创建了两个表并指定了View Device Logs
第一个是rank_id
...将是每行star_date
第二个表适用于weekno % 5 = 1
...每行end_date
,还包括所有周的最后日期。
然后按weekno % 5 = 0
Sql Fiddle Demo 在演示中,如果想了解正在发生的事情,您可以更改rank_id
的{{1}}字段
select
<强>输出强>
*
答案 2 :(得分:0)
我找到了另一个解决方案
<强> SQL Fiddle Demo 强>
SELECT *
FROM t_week w_ini
JOIN t_week w_end
ON w_ini.weekno = w_end.weekno + 4
OR w_ini.weekno + 5 > w_end.weekno
WHERE
w_ini.weekno % 5 = 1
and w_ini.weekno < w_end.weekno
and(
w_end.weekno % 5 = 0 or
w_end.weekno = (SELECT max(weekno) FROM t_week)
)