Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql s: 您需要一个规则表或一些规则配置(我们称之为SMLimitDef),它看起来像是直接在表中输入的: 接下来,您需要一个查询或视图来计算您的第一个事务(称为vFirstUserTransMatch),它看起来像这样: 接下来,您需要一个汇总视图或查询来汇总每个用户每月的事务 接下来,您需要一个查询,根据您的条件将所有内容放在一起: 最后,你可以做你的总结_Mysql_Sql - Fatal编程技术网

Mysql s: 您需要一个规则表或一些规则配置(我们称之为SMLimitDef),它看起来像是直接在表中输入的: 接下来,您需要一个查询或视图来计算您的第一个事务(称为vFirstUserTransMatch),它看起来像这样: 接下来,您需要一个汇总视图或查询来汇总每个用户每月的事务 接下来,您需要一个查询,根据您的条件将所有内容放在一起: 最后,你可以做你的总结

Mysql s: 您需要一个规则表或一些规则配置(我们称之为SMLimitDef),它看起来像是直接在表中输入的: 接下来,您需要一个查询或视图来计算您的第一个事务(称为vFirstUserTransMatch),它看起来像这样: 接下来,您需要一个汇总视图或查询来汇总每个用户每月的事务 接下来,您需要一个查询,根据您的条件将所有内容放在一起: 最后,你可以做你的总结,mysql,sql,Mysql,Sql,正如我所说,如果您使用的是mySQL 8,那么所有内容都可以在一个查询中使用“With”语句,但是对于您的版本,为了可读性和简单性,您需要视图,否则您仍然可以将这些视图的sql嵌入到最终的sql中 小提琴看起来像 与看起来像的版本8相比,它不是。请检查我的提琴请制定任务的最终形式,它的历史对我们来说并不有趣。并指定精确的MySQL版本。@Akina在他使用的小提琴中5.7.33@MarcoLuzzara小提琴中没有免费的版本选择。而且可能真实的服务器版本与fiddle中选择的版本不匹配,所以显式

正如我所说,如果您使用的是mySQL 8,那么所有内容都可以在一个查询中使用“With”语句,但是对于您的版本,为了可读性和简单性,您需要视图,否则您仍然可以将这些视图的sql嵌入到最终的sql中

小提琴看起来像



与看起来像

的版本8相比,它不是。请检查我的提琴请制定任务的最终形式,它的历史对我们来说并不有趣。并指定精确的MySQL版本。@Akina在他使用的小提琴中
5.7.33
@MarcoLuzzara小提琴中没有免费的版本选择。而且可能真实的服务器版本与fiddle中选择的版本不匹配,所以显式的版本指定可能很有用。请检查我的提琴请制定任务的最终形式,它的历史对我们来说并不有趣。并指定精确的MySQL版本。@Akina在他使用的小提琴中
5.7.33
@MarcoLuzzara小提琴中没有免费的版本选择。而且可能真实的服务器版本与fiddle中选择的版本不匹配-因此明确的版本指定可能很有用。im使用mysql 5.7这只适用于三月,但当我在
WHERE DATE_格式(createdAt,'%Y%m')='202103'
中将其更改为
WHERE DATE_格式(createdAt,'%Y%m')='202102'
(当我想在2月份找到
明星会员
时,3月份仍然是一样的,而其唯一的用户id 16计数用户id是
1
@18818181881谢谢,现在就试试。但是,如果这不是你想要的,请用一些例子更新你的问题,以便我们能够更好地理解你的问题谢谢你的回复。)r、 我想做一个查询,找出star成员,在3月份的这个案例中,你做得对,但假设我想在2021年4月
找到,然后我想它会像更改
WHERE DATE_格式一样简单(createdAt,“%Y%m”)=
就像我的第一个查询一样,当我想找出另一个月时,我只需将
的求和(年和月='年和月'
这只适用于三月,但当我将其更改为
何处日期格式(createdAt,%Y%m')='202103'
何处日期格式(createdAt,%Y%m')='202102'
(当我想在2月份找到
明星会员
时,3月份仍然是一样的,而其唯一的用户id 16计数用户id是
1
@18818181881谢谢,现在就试试。但是,如果这不是你想要的,请用一些例子更新你的问题,以便我们能够更好地理解你的问题谢谢你的回复。)r、 我想做一个查询,找出star成员,在3月份的这个案例中,你做得对,但假设我想在2021年4月
找到,然后我想它会像更改
WHERE DATE_格式一样简单(createdAt,“%Y%m”)=
就像我的第一个查询一样,当我想找出另一个月时,我只需在
中更改SUM(year\u and\u month='year\u and\u month'
这太棒了,到目前为止还不错,我只是想知道,所以基本上
SMLimitDef
表是用来根据我的情况生成条件的吗?(关于
700000
350000
中的交易,当我将其从
和月(osm.createdAt)=3和年(osm.createdAt)=2021更改为
和月(osm.createdAt)=1和年(osm.createdAt)=2021
为什么count user_id只有1,而应该是2,因为用户_id 15和16都在2021年1月进行他的第一次交易,并且交易量>=700000。请检查我的提琴,我认为这是因为此查询只在1个用户中查找1个交易,而应该查看每个用户的总交易量因此,它只考虑用户ID 16作为一个明星成员,因为交易直接在<代码> 700000 <代码>,而UsSersID 15有2个交易在<代码> 350000 < /C>和<代码> 400000 < /代码>是的,SMLimitDef是你的条件。好,所以明星会员是累积的月。有意义。我将修改FITS是极好的,到目前为止,G。ood,我只是想知道,所以基本上
SMLimitDef
表是用来根据我的情况来创建条件的?(关于
700000
350000
中的事务,当我将其从
和月(osm.createdAt)=3和年(osm.createdAt)=2021
更改为
和月(osm.createdAt)=1和年(osm.createdAt)=2021
为什么count user_id只有1,而应该是2,因为用户_id 15和16都在2021年1月进行他的第一次交易,并且交易量>=700000。请检查我的提琴,我认为这是因为此查询只在1个用户中查找1个交易,而应该查看每个用户的总交易量因此,它只考虑用户ID 16作为一个明星成员,因为交易直接在<代码> 700000 <代码>,而UsSersID 15有2个事务在<代码> 350000 <代码>和<代码> 400000 < /代码>是的,SMLimitDef是你的条件。好了,明星成员是累积的月。有意义。我会修改,以适应。
        +-------------------+------+-------+
        | count_star_member | year | month |
        +-------------------+------+-------+
        |                 2 | 2021 |     1 |
        |                 1 | 2021 |     3 |
        +-------------------+------+-------+
SELECT min_year, min_month, COUNT(users_id)
FROM (
    SELECT osm2.users_id, YEAR(min_createdAt) min_year, MONTH(min_createdAt) min_month, SUM(total_price_star_member) sum_price
    FROM (
        SELECT users_id, MIN(createdAt) min_createdAt       
        FROM order_star_member
        GROUP BY users_id
    ) AS osm1
    JOIN order_star_member osm2 ON osm1.users_id = osm2.users_id
    WHERE DATE_FORMAT(osm2.createdAt, '%Y%m') = DATE_FORMAT(osm1.min_createdAt, '%Y%m')
    GROUP BY osm2.users_id, min_createdAt
) t1
WHERE users_id IN (
    SELECT users_id
    FROM (
        SELECT users_id, DATE_FORMAT(createdAt, '%Y-%m-01') month_createdAt
        FROM order_star_member
        WHERE DATE_FORMAT(createdAt, '%Y%m') = '202103'
        GROUP BY users_id, DATE_FORMAT(createdAt, '%Y-%m-01')
        HAVING SUM(total_price_star_member) >= (
            CASE
                WHEN date(month_createdAt) < date '2021-03-01' THEN 700000
                ELSE 350000
            END
        )
    ) t3
) AND       
    (((min_year < 2021 OR min_month < 3) AND t1.sum_price >= 700000) OR 
    ((min_year = 2021 AND min_month = 3) AND t1.sum_price >= 350000))
GROUP BY min_year, min_month
SELECT users_id, MIN(createdAt) min_createdAt       
FROM order_star_member
GROUP BY users_id
SELECT osm2.users_id, YEAR(min_createdAt) min_year, MONTH(min_createdAt) min_month, SUM(total_price_star_member) sum_price
FROM osm1
JOIN order_star_member osm2 ON osm1.users_id = osm2.users_id
WHERE DATE_FORMAT(osm2.createdAt, '%Y%m') = DATE_FORMAT(osm1.min_createdAt, '%Y%m')
GROUP BY osm2.users_id, min_createdAt
SELECT users_id
FROM (
    SELECT users_id, DATE_FORMAT(createdAt, '%Y-%m-01') month_createdAt
    FROM order_star_member
    WHERE DATE_FORMAT(createdAt, '%Y%m') = '202102'
    GROUP BY users_id, DATE_FORMAT(createdAt, '%Y-%m-01')
    HAVING SUM(total_price_star_member) >= (
        CASE
            WHEN date(month_createdAt) < date '2021-03-01' THEN 700000
            ELSE 350000
        END
    )
) t3
SELECT min_year, min_month, COUNT(users_id)
FROM t1
WHERE users_id IN (...) AND     
    (((min_year < 2021 OR min_month < 3) AND t1.sum_price >= 700000) OR 
    ((min_year = 2021 AND min_month = 3) AND t1.sum_price >= 350000))
GROUP BY min_year, min_month
insert into SMLimitDef(sEffDate,eEffDate,priceLimit) 
VALUES('1980-01-01','2021-02-28',700000),
('2021-03-01','2999-12-31',350000);

create view vFirstUserTransMatch as
SELECT *,month(osm.createdAt) as createMonth, year(osm.createdAt) as createYear 
FROM order_star_member osm
where createdAt=(select MIN(createdAt) from order_star_member b 
                  where b.users_id=osm.users_id
                 )
create view vOSMSummary as
SELECT users_id,month(osm.createdAt) as createMonth, year(osm.createdAt) as createYear, sum(total_price_star_member) as totalPrice 
FROM order_star_member osm
group by users_id,month(osm.createdAt), year(osm.createdAt);
select osm.*,futm.createMonth as firstMonth, futm.createYear as firstYear 
from vOSMSummary osm 
inner join vFirstUserTransMatch futm
on osm.users_id=futm.users_id
where exists(select 'x' from SMLimitDef c 
             where osm.createMonth between Month(c.sEffDate) and Month(c.eEffDate)
             and osm.createYear between Year(c.sEffDate) and Year(c.eEffDate)
             and osm.totalPrice>=c.pricelimit
            )
and osm.CreateMonth=3 and osm.createYear=2021
SELECT COUNT(users_id) count_star_member,
       firstYear `year`,
       firstMonth `month`
FROM (
select osm.*,futm.createMonth as firstMonth, futm.createYear as firstYear 
from vOSMSummary osm 
inner join vFirstUserTransMatch futm
on osm.users_id=futm.users_id
where exists(select 'x' from SMLimitDef c 
             where osm.createMonth between Month(c.sEffDate) and Month(c.eEffDate)
             and osm.createYear between Year(c.sEffDate) and Year(c.eEffDate)
             and osm.totalPrice>=c.pricelimit
            )
and osm.CreateMonth=3 and osm.createYear=2021
) d
group by firstYear, firstMonth