蘑菇帮 2018-05-10 09:24 采纳率: 38.5%
浏览 3184
已采纳

SQL 某一特定时间点以后的信息提取

我想提取出同一卡号的顾客在【类型】为“脱毛”发生之后消费的所有信息。
如:卡号为10848的顾客,在2016-02-21消费“脱毛”之后,又在2016-09-24和2017-06-11分别消费“脱毛”
我写了如下代码图片说明

如下是我的表格:图片说明 由于营业日期是varchar我用如下代码将他变为date。 alter table dbo.XHD_16 alter column 营业日期 date 求指教 【解释】我想要查看客户消费完脱毛之后还消费了什么项目,条件是在消费脱毛之后的日期。希望这样说大家可以理解我的意思

  • 写回答

11条回答 默认 最新

  • redzh135 2018-05-10 09:45
    关注

    你想查询类型为‘脱毛’的之后这个客户做了那些项目对吧,

    select * from 表 a join (select 客户号,日期 from 表 where type = '脱毛') b on
    a.客户号 = b.客户号 and a.日期 >= b.日期 不知道对不对,你描述的不是很清楚

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 恋上45倾斜 2018-05-10 09:34
    关注

    where 后面加上日期不行吗?

    评论
  • zhouzejie 2018-05-10 09:38
    关注

    营业日期建议改成datetime型

    评论
  • ice_fox_jim 2018-05-10 09:54
    关注

    表述的不是很清楚,我理解一下,你是想找到所有用户在“脱毛”之后的所有操作吗?

    评论
  • gesong_syj 2018-05-10 10:31
    关注

    select * from 表 a join (select 客户号,日期 from 表 where type = '脱毛') b on
    a.客户号 = b.客户号 and a.日期 >= b.日期

    评论
  • 烟雨平生19999 2018-05-10 11:38
    关注

    select * from 表 a join (select 客户号,日期 from 表 where type = '脱毛') b on a.客户号 = b.客户号 and a.日期 >= b.日期

    评论
  • qq_36616309 2018-05-11 00:21
    关注

    select * from 表 where 日期字段>='开始日期' and 日期字段<='截止日期'
    and convert(char(8),日期字段,108)>='开始时间' and convert(char(8),日期字段,108)<='截止时间',
    类似的,在你的where后面加上营业日期>=2016-09-24 and 营业日期<=2017-06-11,他的前提条件是营业日期>=2016-02-21and类型=脱毛

    评论
  • zhangjiulin9090 2018-05-11 02:57
    关注

    select *
    from 表 a,
    (select 客户卡号,
    营业日期
    from 表
    where 类型 = '脱毛') b
    where a.客户卡号 = b.客户卡号
    and a.营业日期 >= b.营业日期
    order by 客户卡号;

    评论
  • mango_love 2018-05-11 03:00
    关注

    你是不是想查询第一次脱毛以后的记录?你可以这样,把查询出来的结果分组取max()具体操作参照文章:https://blog.csdn.net/mango_love/article/details/80249188
    接着重要的来了:这个分组max结果然后inner join关联之前没有分组的结果,然后查询两个结果时间不想等的结果。。这样就可以排除第一次脱毛,就可以得到你想要的客户第一次脱毛后的消费了

    评论
  • lingwu11 2018-05-11 05:40
    关注

    select *
    from 表 a,
    (select top 1 客户卡号,
    营业日期
    from 表
    where 类型 = '脱毛' order by 营业日期) b
    where a.客户卡号 = b.客户卡号
    and a.营业日期 >= b.营业日期
    and a.类型 = '脱毛'
    order by 客户卡号,营业日期;

    评论
  • besthuman 2018-05-23 04:02
    关注

    大概是这个意思,没有你的环境,没法调试

    select * from dbo.XHD_16 t1
    where t1.营业时间 > (
    select min(t2.营业时间) from dbo.XHD_16 t2
    where t1.客户卡号 = t2.客户卡号 and t2.类型 = '脱毛'
    ) or t1.营业时间 > (
    select min(t3.营业时间) from dbo.XHD_17 t3
    where t1.客户卡号 = t3.客户卡号 and t3.类型 = '脱毛'
    )

    union

    select * from dbo.XHD_17 t1
    where t1.营业时间 > (
    select min(t2.营业时间) from dbo.XHD_16 t2
    where t1.客户卡号 = t2.客户卡号 and t2.类型 = '脱毛'
    ) or t1.营业时间 > (
    select min(t3.营业时间) from dbo.XHD_17 t3
    where t1.客户卡号 = t3.客户卡号 and t3.类型 = '脱毛'
    )

    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 stc12c5a60s2单片机测光敏ADC
  • ¥15 生信simpleaffy包下载
  • ¥15 请教一下simulink中S函数相关问题
  • ¥15 在二层网络中,掩码存在包含关系即可通信
  • ¥15 端口转发器解析失败不知道电脑设置了啥
  • ¥15 Latex算法流程图行号自定义
  • ¥15 关于#python#的问题:我在自己的电脑上运行起来总是报错,希望能给我一个详细的教程,(开发工具-github)
  • ¥40 基于51单片机实现球赛计分器功能