table1
  shijian       jijincode    jijinname     price
2008-12-22       000001       建信基金     4.2500
2008-12-23       000001       建信基金     4.2900
2008-12-24       000001       建信基金     5.1000
2008-12-25       000001       建信基金     4.9000
2008-12-26       000001       建信基金     4.9120
2008-12-29       000001       建信基金     4.3000
2008-12-30       000001       建信基金     4.5120
2008-12-31       000001       建信基金     4.4000
2009-01-02       000001       建信基金     5.0000
table2
 shijian       jijincode    jijinname   maimaifangshi     price     jiaoyidanhao    gukedaima
2008-12-22      000001       建信基金     买入           4.3000      2345124        4000258 
2008-12-23      000001       建信基金     卖出           4.5000      4567812        3501250
2008-12-24      000001       建信基金     买入           4.2000      4567895        3501250
2008-12-25      000001       建信基金     买入           4.2500      7854214        6098872要实现的是table2对应table1对客户的买卖在5个正常的工作日时,进行买卖判断,如果买入价格低于5个工作日后的价格,是为正确买入,否则是为错误买入,如果卖出价格低于5个工作日后的价格,是为错误卖出,否则是为正确卖出(这只是个人编写的一部分表,还有很多,因为是5个工作日,本人不知道怎么隔开双休,节假日)请高手指点迷津!~~~~~~~~~

解决方案 »

  1.   

    --工作日处理函数(自定义节假日)if exists (select * from dbo.sysobjects where id = object_id(N'[tb_Holiday]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [tb_Holiday]
    GO--定义节假日表
    CREATE TABLE tb_Holiday(
    HDate smalldatetime primary key clustered, --节假日期
    Name nvarchar(50) not null)             --假日名称
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDay]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_WorkDay]
    GO--计算两个日期之间的工作天数
    CREATE FUNCTION f_WorkDay(
    @dt_begin datetime,  --计算的开始日期
    @dt_end  datetime   --计算的结束日期
    )RETURNS int
    AS
    BEGIN
    IF @dt_begin>@dt_end
    RETURN(DATEDIFF(Day,@dt_begin,@dt_end)
    +1-(
    SELECT COUNT(*) FROM tb_Holiday
    WHERE HDate BETWEEN @dt_begin AND @dt_end))
    RETURN(-(DATEDIFF(Day,@dt_end,@dt_begin)
    +1-(
    SELECT COUNT(*) FROM tb_Holiday
    WHERE HDate BETWEEN @dt_end AND @dt_begin)))
    END
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDayADD]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_WorkDayADD]
    GO--在指定日期上增加工作天数
    CREATE FUNCTION f_WorkDayADD(
    @date    datetime,  --基础日期
    @workday int       --要增加的工作日数
    )RETURNS datetime
    AS
    BEGIN
    IF @workday>0
    WHILE @workday>0
    SELECT @date=@date+@workday,@workday=count(*)
    FROM tb_Holiday
    WHERE HDate BETWEEN @date AND @date+@workday
    ELSE
    WHILE @workday<0
    SELECT @date=@date+@workday,@workday=-count(*)
    FROM tb_Holiday
    WHERE HDate BETWEEN @date AND @date+@workday
    RETURN(@date)
    END
      

  2.   

    本人不知道怎么隔开双休,节假日
    这样判断
    当得到的值not in(6,7)就行了不过你的其他节日的话就需要用自定义函数来构造节日表了
    set datefirst 1
    select datepart(weekday,'2008-12-22')
    /*-----------
    1(1 行受影响)*/