查看: 977|回复: 6
|
这套SQL,有谁有更有效的做法?
[复制链接]
|
|
TBL_A
-----
ID
CHECK_DATE
CHECK_VALUE
简单化后我的SQL只环绕以上这个TABLE,
CHECK_VALUE为一个单位的使用量,CHECK_DATE为该单位的检测时间.
系统每天会在两个时段自动检测并INSERT进这个TABLE,
我现在要做个REPORT, 有按日计算,按星期和按月的.
拿按月计算做例子:
为了要拿到使用量,必须把该月的最后一个使用量和第一使用量相减.
而拿来比较的是DATE. 我的做法是直接拿最大数减最小数 (MAX - MIN),过后发现这个做法行不通,因为有些使用量会呈下线趋势T__T... 我知道如果要写一个正确的做法是用subtable query,那也已经是我做好的另外一个版本,可是执行的时间很长,我想问问,有没有更快的做法呢? |
|
|
|
|
|
|
|
发表于 4-11-2005 09:48 PM
|
显示全部楼层
不是把 from date 到 to date 的 check_value sum 起來嗎? |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 5-11-2005 02:01 AM
|
显示全部楼层
from date 到to date 可能包含几个月,如 -- 10/1/2005 到 12/31/2005
就是要看十月到十二月的,而又指定的报告是按月看用量,所以要拿10月里MIN CHECKDATE的CHECKVALUE差10月里MAX CHECKDATE的CHECKVALUE才可以
我现在是用GROUP BY |
|
|
|
|
|
|
|
发表于 5-11-2005 01:31 PM
|
显示全部楼层
你的资料库是什么呢? 有没有尝试用 stored procedured?
我暂时唯一能想到的是 stored procedured... 因为在里面你可以做 looping. |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 5-11-2005 03:12 PM
|
显示全部楼层
我现在就是在用着STORED PROC了,可是还是嫌时间长(因为要LOOPING)
如果不用LOOPING而可以直接凭单一STATEMENT得出REPORT就再好不过了![](static/image/smiley/default/biggrin.gif) |
|
|
|
|
|
|
|
发表于 5-11-2005 04:35 PM
|
显示全部楼层
有没有尝试用类似一下的:
SELECT
(SELECT MAX(CHECK_VALUE) FROM TBL_A WHERE MONTH(CHECK_DATE) = 10) AS OCT,
(SELECT MAX(CHECK_VALUE) FROM TBL_A WHERE MONTH(CHECK_DATE) = 11) AS NOV
FROM TBL_A WHERE (各种 criteria)
不知道是否是你要的... |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 5-11-2005 05:56 PM
|
显示全部楼层
我大概知道你要表达什么,这方法我没有想过...可能可以,我试了再告诉你. |
|
|
|
|
|
|
| |
本周最热论坛帖子
|