佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 963|回复: 6

这套SQL,有谁有更有效的做法?

[复制链接]
阿牙木 该用户已被删除
发表于 4-11-2005 03:04 PM | 显示全部楼层 |阅读模式
TBL_A
-----
ID
CHECK_DATE
CHECK_VALUE

简单化后我的SQL只环绕以上这个TABLE,
CHECK_VALUE为一个单位的使用量,CHECK_DATE为该单位的检测时间.

系统每天会在两个时段自动检测并INSERT进这个TABLE,
我现在要做个REPORT, 有按日计算,按星期和按月的.

拿按月计算做例子:
为了要拿到使用量,必须把该月的最后一个使用量和第一使用量相减.
而拿来比较的是DATE. 我的做法是直接拿最大数减最小数 (MAX - MIN),过后发现这个做法行不通,因为有些使用量会呈下线趋势T__T... 我知道如果要写一个正确的做法是用subtable query,那也已经是我做好的另外一个版本,可是执行的时间很长,我想问问,有没有更快的做法呢?
回复

使用道具 举报


ADVERTISEMENT

发表于 4-11-2005 09:48 PM | 显示全部楼层
不是把 from date 到 to date 的 check_value sum 起來嗎?
回复

使用道具 举报

阿牙木 该用户已被删除
 楼主| 发表于 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.
回复

使用道具 举报

阿牙木 该用户已被删除
 楼主| 发表于 5-11-2005 03:12 PM | 显示全部楼层
我现在就是在用着STORED PROC了,可是还是嫌时间长(因为要LOOPING)
如果不用LOOPING而可以直接凭单一STATEMENT得出REPORT就再好不过了
回复

使用道具 举报

发表于 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)

不知道是否是你要的...
回复

使用道具 举报

Follow Us
阿牙木 该用户已被删除
 楼主| 发表于 5-11-2005 05:56 PM | 显示全部楼层
我大概知道你要表达什么,这方法我没有想过...可能可以,我试了再告诉你.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-9-2024 11:08 AM , Processed in 0.099187 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表