求助:SQL Server查询

went10 2010-05-31 06:07:06
两个表,一个会员表,一个消费记录表。需要查的是最近消费的会员,然后会员表通过消费时间倒序排序。求助大家怎么做。我打算先分组,统计卡会员的个数,然后在通过消费表中的消费时间条件排序,但这样排序完全不行。求助大家该如何解决,谢谢!
...全文
336 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
went10 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 hucailin 的回复:]
会员卡号不重复,你怎么列出他所有的消费详细列表?
[/Quote]

虽说查询最近消费的会员,以消费表是基础,但最终查询的只是会员卡信息,倒序。
冰凝瞬间1986 2010-06-02
  • 打赏
  • 举报
回复
会员卡号不重复,你怎么列出他所有的消费详细列表?
tkscascor 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 went10 的回复:]
引用 32 楼 tkascor 的回复:
被无视了- -.唉, 无视就无视吧, 我说说我的方式吧.
先求的 CashLog 用户消费记录, 并且获取最近使用的一次时间,. 通过这个操作, 获取的是会员, 与会员对应的最后一次消费时间,
select memberId,count(memberId) as '使用次数',max(cashTime) as time1
from CashLog
……
[/Quote]
额. 那就是我没理解你的问题的原因吧. :)
一切为了你 2010-06-01
  • 打赏
  • 举报
回复
我觉得用视图比较好 用外连接 效率比较低
chen870201 2010-06-01
  • 打赏
  • 举报
回复
加油!
henhaohll 2010-06-01
  • 打赏
  • 举报
回复
楼主,你那需求是要求显示最后一次消费时的时间,消费的会员不重复是想把消费的数据都放在一起?
tkscascor 2010-06-01
  • 打赏
  • 举报
回复
被无视了- -.唉, 无视就无视吧, 我说说我的方式吧.
先求的 CashLog 用户消费记录, 并且获取最近使用的一次时间,. 通过这个操作, 获取的是会员, 与会员对应的最后一次消费时间,
select memberId,count(memberId) as '使用次数',max(cashTime) as time1
from CashLog
group by memberId

,然后通过左链接,根据提取出来的用户消费记录获取用户对应的数据, 并且通过时间倒序排列.
xmx9513 2010-06-01
  • 打赏
  • 举报
回复
学习下~~~
went10 2010-06-01
  • 打赏
  • 举报
回复
很谢谢23、27、29三位朋友的指点,不管是得出的数据还是查询方式都很不错。
很头疼的是,那些查询出来的会员信息必须不能重复,因为最终需要的结果就是那些消费的会员按消费时间倒序进行排序。
army369168520 2010-06-01
  • 打赏
  • 举报
回复
select * from(
select b.cardId,b.memName,a.cashTime from
(SELECT distinct memberID,cashTime FROM cashlog where memberID IN (SELECT memberID FROM member)) a left join Member b on a.memberID=b.memberId) as table2 order by cashTime desc
tkscascor 2010-06-01
  • 打赏
  • 举报
回复
select a.memberId,b.memberName ,a.使用次数

from
(
select memberId,count(memberId) as '使用次数',max(cashTime) as time1
from CashLog
group by memberId
)as a left join Member b
on a.memberId= b.memberId
ordery by a.time1 desc



我的应该可以满足你的要求..
wwwtre 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 army369168520 的回复:]
两个表,一个会员表,一个消费记录表。需要查的是最近消费的会员,然后会员表通过消费时间倒序排序。
(1)先把两个表联系起来
select * from 会员表 inner join 消费记录表 on 会员表.字段1=消费记录表.字段1
然后根据消费者时间
select * from (select * from 会员表 inner join 消费记录表 on 会员表.字段1=消费记录表.字段……
[/Quote]

你的查询结果是出来了,但是多余的数据是在太多了.

ge:查询再近7天的消费数据

select 姓名字段,卡号字段,消费时间字段 from (select * from 会员表 inner join 消费记录表 on 会员表.卡号字段1=消费记录表.卡号字段1) as 表2
where datediff(dd,消费时间字段,getdate())<=7
order by 消费记录表.消费时间字段 desc
scdn8311 2010-06-01
  • 打赏
  • 举报
回复
select b.cardId,b.memName,a.cashTime from
(SELECT distinct memberID,cashTime FROM cashlog where memberID IN (SELECT memberID FROM member)) a left join Member b on a.memberID=b.memberId
went10 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 henhaohll 的回复:]
楼主,你那需求是要求显示最后一次消费时的时间,消费的会员不重复是想把消费的数据都放在一起?
[/Quote]

按所有卡号的最后一次消费时间,可以这么理解的。
went10 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 tkascor 的回复:]
被无视了- -.唉, 无视就无视吧, 我说说我的方式吧.
先求的 CashLog 用户消费记录, 并且获取最近使用的一次时间,. 通过这个操作, 获取的是会员, 与会员对应的最后一次消费时间,
select memberId,count(memberId) as '使用次数',max(cashTime) as time1
from CashLog
group by member……
[/Quote]

真对不起这位朋友,我当然没有无视,大家的指点我都有认真考虑到的。只是刚发了前一个贴子就掉线断网了,现在才下班。你上一种方式我也考虑到了,不过我不管怎么写查询语句,先分组然后按照条件排序完全不行啊。
cnliming 2010-05-31
  • 打赏
  • 举报
回复
分2个表,然后用左连接
yudeli 2010-05-31
  • 打赏
  • 举报
回复
select b.cardId,b.memName,a.cashTime from
(SELECT distinct memberID,cashTime FROM cashlog where memberID IN (SELECT memberID FROM member)) a left join Member b on a.memberID=b.memberId
yudeli 2010-05-31
  • 打赏
  • 举报
回复
select b.cardId,b.memName,a.cashTime from
(SELECT memberID,cashTime FROM cashlog where memberID IN (SELECT memberID FROM member)) a left join Member b on a.memberID=b.memberId
army369168520 2010-05-31
  • 打赏
  • 举报
回复
select distinct memberID from 会员表
不重复的会员
army369168520 2010-05-31
  • 打赏
  • 举报
回复
select distinct memberID from (select * from 会员表 inner join 消费记录表 on 会员表.字段1=消费记录表.字段1) as 表2 order by 消费记录表.时间字段 desc
加载更多回复(19)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧