回 帖 发 新 帖 刷新版面

主题:如何筛选连续三个月以上超标准的记录(3)

经过前两次发贴求教后,在筛选连续三个月以上超标准记录的代码编写上有了很多启发,但这两天为此继续研究仍然有一个问题无法解决。我还是先举例:

  吉祥商店 ,该商店在定额表中“定额”为5000元(定额字段为5000),在“销售”表中,该商店1月份(销售额字段)为5000,2月份为6500,3月份停业(表中无该月记录),4月份为4800,5月份为6600,6月份为6500,7月份为6100,8月份为停业(表中无该月记录),9月份为6000,10月份为5000,11月份为4800,12月份为4900。要求把该商店“销售”表中连续3个月以上超过“定额表”中对应的定额记录筛选出来。
    
   以前所给的记录都是满12个月记录,如果中间有断的月份该怎么办呢?就像上例3月份和8月份都停业了,所以表中没有这两个月记录。另外不能用代码直接和5000元比,因为该户在定额表中有两条记录,第一条是1月至4月定额为5000,第二条记录是5月至12月定额为4000。有的户还有2条以上的额定记录。

   
定额表             月份起      月份止         识别号        定额
                2009.01.01    2009.04.30        11         5000.00
                2009.05.01    2009.12031        11         4000.00
                2009.01.01    2009.12.31        22         5200.00


销售表             月份                识别号        销售额
                2009.01.01               11          5000.00
                2009.02.03               11          6500.00
                2009.04.03               11          4800.00
                2009.05.02               11          6600.00
                2009.06.02               11          6500.00   
                2009.07.02               11          6100.00
                2009.09.02               11          6000.00
                2009.10.02               11          5000.00
                2009.11.02               11          4800.00
                2009.12.02               11          4900.00      (3月和8月无记录)
                    
              2009.01.02               22          5600.00
              2009.02.01               22          6500.00
              .......
              2009.12.03               22          6700.00
    请多多指教。谢谢 !!!

回复列表 (共7个回复)

沙发

你想要的结果?

板凳

就是要筛选出连续三个月“销售表”中销售额超过“定额表”的定额数据记录

3 楼

SELECT d.识别号,x.月份,x.销售额 FROM 定额表 d,销售表 x WHERE x.识别号=d.识别号 AND x.月份>=d.月份起 AND x.月份<=d.月份止 AND x.销售额>d.定额
其中:月份、月份起、月份止 均为日期型字段
      销售额、定额 均为数值型字段

4 楼

还有一点说明一下,月份起 应取值为每月的1日,月份止 应取值为每月的月末。

5 楼

很感谢,但这样做只是把所有大于定额 的记录筛选出来,不是连续三个月的。

6 楼

SET DATE SHORT

SELECT M.YF,M.SBH,M.XSE,M.DE FROM (SELECT A.*,B.DE FROM XSB A LEFT JOIN DEB B ON A.SBH=B.SBH AND A.YF>=B.YFQ AND A.YF<=B.YFZ) M WHERE M.XSE>=M.DE ORDER BY M.SBH,M.YF INTO CURSOR TEMP

SELECT M1.*,[color=FF0000]RECNO()-INT(VAL(SUBSTR(DTOC(YF),6,2))) AS BZ [/color]FROM TEMP M1 INTO CURSOR TMP

SELECT * FROM (SELECT A.*,(SELECT COUNT(*) FROM TMP B WHERE A.BZ=B.BZ) AS TJ FROM TMP A) M2 WHERE M2.TJ>2

*XSB=销售表,DEB=定额表
*YF=月份,SBH=识别号,DE=定额,YFQ=月份起,YFZ=月份止,XSE=销售额
*BZ=分组标志,TJ=统计连续月数

*思路:第一条语句,先连接查询识别号一致,且销售月份在定额时间段内,同时销售额>定额,这里要按识别号\月份排序下,后面要用到.

*第二条:用记录号-月份的数值来进行判断是否是连续的月份(做分组标志).这比较关键.这样分组后,要做其他的表格也比较容易了.

*第三条:查询分组后为连续三月的数据.

7 楼

非常感谢六楼朋友,你的这个思路我会再研究。因为我已经按你上次的那个代码做成功了。之前我用你上次的代码提示错误是我没有用过gomonth()函数,而dateadd()函数有三个参数值,gomonth()只能有两个参数,所以我将dateadd()直接改为gomonth()是不行的。我后来查阅gomonth()函数用法后,经过改动终于成功了。很是感谢!有机会再向你请教!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册