sql 杂

/* row_number() over ([partition by t.xx] order by t.kk /asc/desc) rn */

select * from (
select t1.*,
row_number() over (partition by t1.Name order by t1.CreateDate desc) rn 
from t1
inner join t2 on ...
) XX

where XX.rn=1


select t1.Name,max(t1.Number) from ta group by t1.Name



select p.loanid,
                   p.customerid,
                   sum(p.totalfee) totalfee, --应收本息
                   sum(case when p.paystate='01' then p.totalfee else 0 end) unbacktotal, --待收本息
                   sum(case when p.paystate='02' then p.totalfee else 0 end) backedtotal,  --已收本息
                   max(case when p.paystate='02' then p.ordernumber else null end) backedtimes --已还期数
              from t_profitplan p 
             group by p.loanid,p.customerid



SqlServer
select top(1) t1.* from t1


Oracle
select * from (
select * from t1 order by t1.CreateDate desc
) where rownum=1






insert into t_customermsg(id,customerid,content)
    select sys_guid(),c.id,'哈喝' from t_customer c
     inner join t_loginaccount l on c.id=l.id and l.emailvalid='02'
     where c.status='01';


/*
  declare 
  cursor c is  select * from t_customer t1
inner join t_loginaccount t2 on t1.id=t2.id and t2.emailvalid='02'
where t1.status='01';
  c_row c%rowtype;
  
  newcontent nvarchar2(1024);

begin
  newcontent='hello';
  for c_row in c loop
    --dbms_output.put_line(c_row.id||'*_*'||c_row.customername);
    insert into t_customermsg(id,customerid,content) values (sys_guid(),c_row.id,'哈喝');
  end loop;
end;
*/



    update t_LotteryOpp lo set (lo.Amount,lo.Lastupdatedate)=
       (select t.Amount,sysdate
          from t_Temp t
         where t.CustomerId=lo.CustomerId 

        );










create or replace package PCK_Lottery is

  -- Author  : licheng
  -- Created : 2015-1-4
  -- Purpose : 抽奖活动

  -- Public type declarations
  type out_cursor is ref cursor;

  --我的推荐
  procedure pro_GetMyRecommendList(p_CustomerId varchar2,
                                   p_PromotionId varchar2,
                                   op_Result out out_cursor);

  --抽奖机会
  procedure pro_RefreshLotteryOpp(p_PromotionId varchar2);

end PCK_Lottery;



create or replace package body PCK_Lottery is

--我的推荐
  procedure pro_GetMyRecommendList(p_CustomerId varchar2,
                                   --p_StartDate date,
                                   --p_EndDate date,
                                   p_PromotionId varchar2,
                                   op_Result out out_cursor) AS
  v_StartDate date;
  v_EndDate date;
  v_EndDateStr varchar2(50);
  begin
    
    select t.StartDate,t.EndDate into v_StartDate,v_EndDate from t_PromotionInfo t where t.Id=p_PromotionId; --and t.Status='01';
    v_EndDateStr:=to_char(v_EndDate,'yyyy-MM-DD')||' 23:59:59';
    v_EndDate:=to_date(v_EndDateStr,'yyyy-MM-dd HH24:MI:ss');
    
    open op_Result for
      select TT.* from (
        select la.NickName,c.Mobile,ptr.TransAmt TenderMoney,
               row_number() over(partition by ptr.CustomerId order by ptr.CreateDate asc) rn
        from T_LoginAccount t
        inner join T_LoginAccount la on la.Referee=t.RefereeCode
        inner join T_Customer c on c.Id=la.Id
        inner join T_PnrTenderRecords ptr on ptr.CustomerId=la.Id
        inner join T_TenderRecord tr on tr.PnrTenderId=ptr.Id
        where t.Status='01' and t.Id=p_CustomerId
        and la.Status='01'
        --and la.CreateDate>=to_date('2015-01-01 00:00:00', 'yyyy-MM-dd HH24:MI:ss')
        --and la.CreateDate<=to_date('2015-01-31 23:59:59','yyyy-MM-dd HH24:MI:ss')
        and la.CreateDate>=v_StartDate and la.CreateDate<=v_EndDate
        and ptr.Status='01'
        and (ptr.BehindIsSuccess='Y' or ptr.PageIsSuccess='Y')
        and ptr.CreateDate>=v_StartDate and ptr.CreateDate<=v_EndDate
        and tr.IsFreezeSuccess='02'
        and tr.UserTypeId is null and tr.UserAccountId is null
      ) TT
      where TT.rn=1 and TT.TenderMoney>=1000;
      
  end pro_GetMyRecommendList;


--抽奖机会
  procedure pro_RefreshLotteryOpp(p_PromotionId varchar2) IS
    v_PromotionExisted number;
    v_StartDate date;
    v_EndDate date;
    v_EndDateStr varchar2(50); 
    
    --查询每个用户推荐的有效的人数,即抽奖机会
    cursor c_result is 
       select TT.CustomerId,count(*) Amount from (
          select t.Id CustomerId,ptr.TransAmt TenderMoney,
                 row_number() over(partition by ptr.CustomerId order by ptr.CreateDate asc) rn
          from T_LoginAccount t
          inner join T_LoginAccount la on la.Referee=t.RefereeCode
          inner join T_Customer c on c.Id=la.Id
          inner join T_PnrTenderRecords ptr on ptr.CustomerId=la.Id
          inner join T_TenderRecord tr on tr.PnrTenderId=ptr.Id
          where t.Status='01'
          and la.Status='01'
          and la.CreateDate>=v_StartDate and la.CreateDate<=v_EndDate
          and ptr.Status='01'
          and (ptr.BehindIsSuccess='Y' or ptr.PageIsSuccess='Y')
          and ptr.CreateDate>=v_StartDate and ptr.CreateDate<=v_EndDate
          and tr.IsFreezeSuccess='02'
          and tr.UserTypeId is null and tr.UserAccountId is null
        ) TT
        where TT.rn=1 and TT.TenderMoney>=1000
        group by TT.CustomerId;
     
     c_row c_result%rowtype;
     v_Existed number;
     v_Guid varchar2(36);
     
  begin
    
    --若活动实效,则不执行
    select count(*) into v_PromotionExisted from dual t where exists
       (select * from t_PromotionInfo t where t.Id=p_PromotionId and t.Status='01');
    if v_PromotionExisted=0 then
      return;
    end if;
    
    --查询活动起止时间
    select t.StartDate,t.EndDate into v_StartDate,v_EndDate from t_PromotionInfo t where t.Id=p_PromotionId and t.Status='01';
    v_EndDateStr:=to_char(v_EndDate,'yyyy-MM-DD')||' 23:59:59';
    v_EndDate:=to_date(v_EndDateStr,'yyyy-MM-dd HH24:MI:ss');
    
    --若活动未开始或已结束,则不执行
    if sysdate<v_StartDate or sysdate>v_EndDate then
      return;
    end if;
    
    for c_row in c_result loop
      --若T_LotteryOpp有数据,则update
      select count(*) into v_Existed from dual where exists
         ( select * from t_LotteryOpp t where t.CustomerId=c_row.CustomerId );
      if v_Existed!=0 then
        update t_LotteryOpp 
           set Amount=c_row.Amount,LastUpdateDate=sysdate 
         where CustomerId=c_row.CustomerId 
           and PromotionId=p_PromotionId 
           and Amount!=c_row.Amount;
      --若T_LotteryOpp有数据,则insert
      else
        select sys_guid() into v_Guid from dual;
        v_Guid:=substr(v_Guid,1,8)||'-'||substr(v_Guid,9,4)||'-'||substr(v_Guid,13,4)||'-'||substr(v_Guid,17,4)||'-'||substr(v_Guid,20,12);
        insert into t_Lotteryopp values(
           v_Guid,
           c_row.CustomerId,
           p_PromotionId,
           c_row.Amount,
           0,
           v_StartDate,
           v_EndDate,
           '01',
           sysdate,
           null,
           sysdate,
           null);
      end if;
    end loop;
    
    /*
    update t_LotteryOpp lo set (lo.Amount,lo.Lastupdatedate)=
       (select c_result.Amount,sysdate
          from c_result 
         where c_result.CustomerId=lo.CustomerId 
           and lo.LotteryId=p_PromotionId
           and c_result.Amount!=lo.Amount
        );
        
     insert into t_LotteryOpp(Id,
                              CustomerId,
                              PromotionId,
                              Amount,
                              UsedAmount,
                              StartDate,
                              EndDate,
                              Status,
                              CreateDate,
                              Creator,
                              LastUpdateDate,
                              LastUpdateUser
                              )
        select substr(g.Guid,1,8)||'-'||substr(g.Guid,9,4)||'-'||substr(g.Guid,13,4)||'-'||substr(g.Guid,17,4)||'-'||substr(g.Guid,20,12),
               c_result.CustomerId,
               p_PromotionId,
               c_result.Amount,
               0,
               v_StartDate,
               v_EndDate,
               '01',
               sysdate,
               null,
               sysdate,
               null
          from c,
               (select sys_guid() Guid from dual) g
         where not exists
           ( select * from t_LotteryOpp t where t.Customerid=c_result.CustomerId and t.PromotionId=p_PromotionId );
    */
    commit;
    
  end pro_RefreshLotteryOpp;



end PCK_Lottery;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值