MySQL查询-数据未按预期显示,代码中存在问题
我正在试图查询一个数据库,查找在给定日期没有到达预定地点的人数。然而,给出的结果并不像预期的那样 通过手动检查,2021年5月3日的结果应显示为3。我感觉客户id与显示的结果一起添加,而不仅仅是单个客户id的计数MySQL查询-数据未按预期显示,代码中存在问题,mysql,sql,Mysql,Sql,我正在试图查询一个数据库,查找在给定日期没有到达预定地点的人数。然而,给出的结果并不像预期的那样 通过手动检查,2021年5月3日的结果应显示为3。我感觉客户id与显示的结果一起添加,而不仅仅是单个客户id的计数 select count(c.CUSTOMER_ID) AS 'No Shows', date(checkins.POSTDATE) as date from customers c, checkins where checkins.postdate >
select
count(c.CUSTOMER_ID) AS 'No Shows',
date(checkins.POSTDATE) as date
from
customers c, checkins
where
checkins.postdate >= date_sub(curdate(), interval 7 day)
and
(
c.archived = 0
and (
(
(
(
(
(
c.GUID in (
select
sb1.customer_guid
from
schedule_bookings sb1
join schedule_events se1 on sb1.course_guid = se1.course_guid
and sb1.OFFERING_ID in (
'2915911', '3022748', '3020740', '2915949',
'2914398', '2916147', '3022701',
'3020699', '2916185', '2915168',
'2916711', '3022403', '3020455',
'2916785', '2916478', '2915508',
'3022538', '3020582', '2915994',
'2914547', '2916069', '3022648',
'3020658', '2916107', '2915290',
'2928786', '2914729', '3022854',
'3020812', '2914694', '2914659',
'3041801', '2920756', '2920834',
'2920795', '2916223', '3022788',
'3020783', '2916239', '2915013'
)
and sb1.CANCELLED in ('0')
)
)
or (
c.GUID in (
select
sp.customer_guid
from
schedule_participants sp
join schedule_bookings sb2 on sp.BOOKING_ID = sb2.BOOKING_ID
join schedule_events se2 on sb2.course_guid = se2.course_guid
and sb2.OFFERING_ID in (
'2915911', '3022748', '3020740', '2915949',
'2914398', '2916147', '3022701',
'3020699', '2916185', '2915168',
'2916711', '3022403', '3020455',
'2916785', '2916478', '2915508',
'3022538', '3020582', '2915994',
'2914547', '2916069', '3022648',
'3020658', '2916107', '2915290',
'2928786', '2914729', '3022854',
'3020812', '2914694', '2914659',
'3041801', '2920756', '2920834',
'2920795', '2916223', '3022788',
'3020783', '2916239', '2915013'
)
and sb2.CANCELLED in ('0')
)
)
)
)
)
and (
(
(
not (
(
(
select
count(CHECKIN_ID)
from
checkins
where
checkins.CUSTOMER_ID = c.CUSTOMER_ID
) between 1
and 9999
)
)
)
)
)
)
)
and not c.customer_id in (1008, 283429, 2507795)
)
group by date(checkins.POSTDATE)
结果如下:
+----------+------------+
| No Shows | date |
+----------+------------+
| 30627 | 2021-04-27 |
| 37638 | 2021-04-28 |
| 34071 | 2021-04-29 |
| 33579 | 2021-04-30 |
| 29274 | 2021-05-01 |
| 30135 | 2021-05-02 |
| 48339 | 2021-05-03 |
| 8979 | 2021-05-04 |
+----------+------------+
8 rows in set (8.71 sec)
正如你所看到的,计数远没有达到预期的水平
查询参数包括:
客户是所列特定产品(产品id)的参与者/受赌注者
客户的“签入”计数不在1和9999之间。
按每个日期的计数显示这些结果
有人知道为什么这个查询不能按预期显示结果吗
问候
汤姆让我们试着把这一点颠倒过来。您正在处理一组非常有限的产品ID。比如从你所关心的有限的产品列表开始,然后再加入。此外,似乎不需要连接到schedule events表。如果什么东西被预订了,它就被预订了。您永远不会从事件本身获得任何附加上下文 所以,让我们从一个非常简单的联合开始。您正在查看预订表以查找可能的客户ID。然后从实际参与者那里获得相同的预订。我的猜测是,并不是每个实际预订的人都可能是参与者,同样,所有参与者也可能不是预订方 所有这些都与实际的最终客户、归档状态甚至预订活动无关。我们只是得到了人-时期。一旦你有了这些人和日期,就可以得到这些数字
select
date(CI.POSTDATE) as date,
count( JustCustomers.customer_guid ) AS 'No Shows'
from
(
select
sb1.customer_guid
from
schedule_bookings sb1
where
sb1.CANCELLED = 0
-- if "ID" are numeric, dont use quotes to imply character
and sb1.OFFERING_ID in
( 2915911, 3022748, 3020740, 2915949,
2914398, 2916147, 3022701, 3020699,
2916185, 2915168, 2916711, 3022403,
3020455, 2916785, 2916478, 2915508,
3022538, 3020582, 2915994, 2914547,
2916069, 3022648, 3020658, 2916107,
2915290, 2928786, 2914729, 3022854,
3020812, 2914694, 2914659, 3041801,
2920756, 2920834, 2920795, 2916223,
3022788, 3020783, 2916239, 2915013
)
UNION
select
sp.customer_guid
from
schedule_bookings sb2
JOIN schedule_participants sp
on sb2.BOOKING_ID = sp.BOOKING_ID
where
sb2.CANCELLED = 0
and sb2.OFFERING_ID in
( 2915911, 3022748, 3020740, 2915949,
2914398, 2916147, 3022701, 3020699,
2916185, 2915168, 2916711, 3022403,
3020455, 2916785, 2916478, 2915508,
3022538, 3020582, 2915994, 2914547,
2916069, 3022648, 3020658, 2916107,
2915290, 2928786, 2914729, 3022854,
3020812, 2914694, 2914659, 3041801,
2920756, 2920834, 2920795, 2916223,
3022788, 3020783, 2916239, 2915013
)
) JustCustomers
JOIN customers c
on JustCustomers.customer_guid = c.customer_id
AND c.archived = 0
AND NOT c.customer_id IN (1008, 283429, 2507795)
JOIN checkins CI
on c.CUSTOMER_ID = CI.CUSTOMER_ID
AND CI.postdate >= date_sub(curdate(), interval 7 day)
group by
date(ci.POSTDATE)
我注意到的一件奇怪的事情是,你在寻找“没有演出”,但明确地寻找那些登记入住的人。现在,如果您要查找所有应该参加某个活动的人,那么您可能要查找客户没有登记入住的地方。如果这是预期的情况,则不会关联入住日期。如果是这样的话,我希望在一些表中有一个日期,比如事件日期。。。比如说乘船旅行,不管是谁到了船上,活动都是在乘船旅行的时候进行的
如果我有点不对劲,我建议你编辑你现有的帖子,提供更多的细节/澄清。这个查询中有很多“噪音”,但是测试3的预期结果的一个快速方法可能是使用
计数(不同的c.CUSTOMER\u ID)
,因为这将在一定程度上从嵌套中排除重复项。嘿,Matigo,感谢您建议调用测试。我只是运行了不同的计数,结果是每个结果都是完全相同的数字(123)——奇数!看来我需要联系一下这个软件的创建者。这一切都有点倒退。