sql查询报错Unknown column 'consume_date' in 'where clause'

allenwhs 2017-09-05 06:23:09
select a.id, max(b.amount_after) as initial_amount, c.consume_amount from mcc_amount_change_record b 
left join mcc_customer a on a.id = b.customer_id
left join (select customer_id, min(consume_date) as min_consume_date, consume_amount from mcc_customer_consume group by customer_id ) as c on c.customer_id = b.customer_id
where register_date > "2017-04-01 00:00:00"
and create_time < min_consume_date
and amount_after >= "500"
and consume_date = min_consume_date
group by id


consume_date 在 mcc_customer_consume表里有
求教
...全文
575 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-09-05
  • 打赏
  • 举报
回复
consume_date 在 mcc_customer_consume表里有,但是查询的语句没有关联mcc_customer_consume表,所以不存在。
OwenZeng_DBA 2017-09-05
  • 打赏
  • 举报
回复
引用 9 楼 qq_28029989的回复:
[quote=引用 6 楼 z10843087 的回复:] @qq_28029989 这样试试呢
SELECT  a.id ,
        MAX(b.amount_after) AS initial_amount ,
        c.consume_amount
FROM    mcc_amount_change_record b
        LEFT JOIN mcc_customer a ON a.id = b.customer_id
        LEFT JOIN ( SELECT  customer_id ,
                            MIN(consume_date) AS min_consume_date ,
                            consume_amount
                    FROM    mcc_customer_consume
                    GROUP BY customer_id
                  ) AS c ON c.customer_id = b.customer_id
        JOIN mcc_customer_consume d ON c.min_consume_date = d.consume_date
WHERE   register_date > "2017-04-01 00:00:00"
        AND create_time < min_consume_date
        AND amount_after >= "500"
GROUP BY id

跑不出来[/quote] 跑不出来是表太大了吗,你拆分开用个临时表
allenwhs 2017-09-05
  • 打赏
  • 举报
回复
引用 6 楼 z10843087 的回复:
@qq_28029989 这样试试呢
SELECT  a.id ,
        MAX(b.amount_after) AS initial_amount ,
        c.consume_amount
FROM    mcc_amount_change_record b
        LEFT JOIN mcc_customer a ON a.id = b.customer_id
        LEFT JOIN ( SELECT  customer_id ,
                            MIN(consume_date) AS min_consume_date ,
                            consume_amount
                    FROM    mcc_customer_consume
                    GROUP BY customer_id
                  ) AS c ON c.customer_id = b.customer_id
        JOIN mcc_customer_consume d ON c.min_consume_date = d.consume_date
WHERE   register_date > "2017-04-01 00:00:00"
        AND create_time < min_consume_date
        AND amount_after >= "500"
GROUP BY id

跑不出来
allenwhs 2017-09-05
  • 打赏
  • 举报
回复
引用 7 楼 RINK_1 的回复:
这样试试呢。 select a.id, max(b.amount_after) as initial_amount, c.consume_amount from mcc_amount_change_record b left join mcc_customer a on a.id = b.customer_id left join mcc_customer_consume c on c.customer_id = b.customer_id where register_date > "2017-04-01 00:00:00" and create_time < min_consume_date and amount_after >= "500" and not exists (select 1 from mcc_customer_consume where c.customer_id=customer_id and consume_date<c.consume_date) group by id
min_consume_date前面都没有查,报错
RINK_1 2017-09-05
  • 打赏
  • 举报
回复
这样试试呢。 select a.id, max(b.amount_after) as initial_amount, c.consume_amount from mcc_amount_change_record b left join mcc_customer a on a.id = b.customer_id left join mcc_customer_consume c on c.customer_id = b.customer_id where register_date > "2017-04-01 00:00:00" and create_time < min_consume_date and amount_after >= "500" and not exists (select 1 from mcc_customer_consume where c.customer_id=customer_id and consume_date<c.consume_date) group by id
OwenZeng_DBA 2017-09-05
  • 打赏
  • 举报
回复
@qq_28029989 这样试试呢
SELECT  a.id ,
        MAX(b.amount_after) AS initial_amount ,
        c.consume_amount
FROM    mcc_amount_change_record b
        LEFT JOIN mcc_customer a ON a.id = b.customer_id
        LEFT JOIN ( SELECT  customer_id ,
                            MIN(consume_date) AS min_consume_date ,
                            consume_amount
                    FROM    mcc_customer_consume
                    GROUP BY customer_id
                  ) AS c ON c.customer_id = b.customer_id
        JOIN mcc_customer_consume d ON c.min_consume_date = d.consume_date
WHERE   register_date > "2017-04-01 00:00:00"
        AND create_time < min_consume_date
        AND amount_after >= "500"
GROUP BY id

OwenZeng_DBA 2017-09-05
  • 打赏
  • 举报
回复
@qq_28029989 仔细看了下,确实是有问题的。 mcc_customer_consume 里面有个consume_date ,但是你的语句中并没有查出consume_date 。所以会报错 ( SELECT customer_id , MIN(consume_date) AS min_consume_date , consume_amount FROM mcc_customer_consume GROUP BY customer_id ) AS c
allenwhs 2017-09-05
  • 打赏
  • 举报
回复
select a.id, max(b.amount_after) as initial_amount, c.consume_amount as first_consume_amount from mcc_amount_change_record b 
left join mcc_customer a on a.id = b.customer_id 
left join (select customer_id, consume_date = min(consume_date) as min_consume_date, consume_amount from mcc_customer_consume group by customer_id ) as c on c.customer_id = b.customer_id 
where register_date > "2017-04-01 00:00:00" 
and create_time < min_consume_date 
and amount_after >= "500" 
group by id
换成这样可以运行,但是不出结果。。。。
OwenZeng_DBA 2017-09-05
  • 打赏
  • 举报
回复
引用 2 楼 qq_28029989 的回复:
[quote=引用 1 楼 z10843087 的回复:] [quote=引用 楼主 qq_28029989 的回复:]
select a.id, max(b.amount_after) as initial_amount, c.consume_amount from mcc_amount_change_record b 
left join mcc_customer a on a.id = b.customer_id 
left join (select customer_id, min(consume_date) as min_consume_date, consume_amount from mcc_customer_consume group by customer_id ) as c on c.customer_id = b.customer_id 
where register_date > "2017-04-01 00:00:00" 
and create_time < min_consume_date 
and amount_after >= "500" 
and consume_date = min_consume_date
group by id
consume_date 在 mcc_customer_consume表里有 求教
试试在consume_date 前面加上表名,,变成 mcc_customer_consume.consume_date [/quote] 还是不行[/quote] 是不是一段代码中的其他部分出差,代码检查下
allenwhs 2017-09-05
  • 打赏
  • 举报
回复
引用 1 楼 z10843087 的回复:
[quote=引用 楼主 qq_28029989 的回复:]
select a.id, max(b.amount_after) as initial_amount, c.consume_amount from mcc_amount_change_record b 
left join mcc_customer a on a.id = b.customer_id 
left join (select customer_id, min(consume_date) as min_consume_date, consume_amount from mcc_customer_consume group by customer_id ) as c on c.customer_id = b.customer_id 
where register_date > "2017-04-01 00:00:00" 
and create_time < min_consume_date 
and amount_after >= "500" 
and consume_date = min_consume_date
group by id
consume_date 在 mcc_customer_consume表里有 求教
试试在consume_date 前面加上表名,,变成 mcc_customer_consume.consume_date [/quote] 还是不行
OwenZeng_DBA 2017-09-05
  • 打赏
  • 举报
回复
引用 楼主 qq_28029989 的回复:
select a.id, max(b.amount_after) as initial_amount, c.consume_amount from mcc_amount_change_record b 
left join mcc_customer a on a.id = b.customer_id 
left join (select customer_id, min(consume_date) as min_consume_date, consume_amount from mcc_customer_consume group by customer_id ) as c on c.customer_id = b.customer_id 
where register_date > "2017-04-01 00:00:00" 
and create_time < min_consume_date 
and amount_after >= "500" 
and consume_date = min_consume_date
group by id
consume_date 在 mcc_customer_consume表里有 求教
试试在consume_date 前面加上表名,,变成 mcc_customer_consume.consume_date

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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