рд╣рдордиреЗ рдХреИрд╕реЗ рдЧреНрд░реЛрдкрд╛рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдореЛрдкрд▓реНрдЯ рд╕реЗрд╡рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╣рд╡рд╛рд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред
Promopult рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реЗрд╡рд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХреЗ 10 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдорд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИ рд╣реИред рдЬреЛ рд▓реЛрдЧ рд╕рдорд╛рди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдЖрдП рд╣реИрдВ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдпрд╣ рд╕рд░рдгреА рд╕рдЬрд╛рддреАрдп рд╕реЗ рджреВрд░ рд╣реИред
рдХрд┐рд╕реА рдиреЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдФрд░ "рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╕реЛ рдЧрдпрд╛"ред рдХрд┐рд╕реА рдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рднреВрд▓ рдЧрдП рдФрд░ рдЫрд╣ рдорд╣реАрдиреЗ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ред рдХреЛрдИ рдХреИрд╢рд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдкреИрд╕рд╛ рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдИ рдореБрдлреНрдд рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реИред рдФрд░ рд╕рднреА рд╕реЗ рдХреБрдЫ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдЬреИрд╕реЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░, рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╕реВрдХреНрд╖реНрдо рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд░реБрдЭрд╛рдиреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдмрдбрд╝реЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕рд╛рд░рд╛рдВрд╢
- рдХреЛрд╣реЛрд░реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
- SQL рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдорд╣реАрдиреЗ рддрдХ рд╕рд╣рдХрд░реНрдореА рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред
- рдЧреЛрд░рдлрд╛рдирд╛ рдореЗрдВ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП ред
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрд╣реЛрд░реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ SQL рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВред
1. рдХреЛрд╣реЛрд░реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ
рдХреЛрд╣реЛрд░реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ (рдХреЙрд╣реЛрд░реНрдЯреНрд╕) рдХреА рддреБрд▓рдирд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдЕрдХреНрд╕рд░, рд╣рдорд╛рд░реЗ рд╕рдореВрд╣ рд╕рдкреНрддрд╛рд╣ рдпрд╛ рдорд╣реАрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреА рдЧрдгрдирд╛ рдпрд╣рд╛рдВ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдордЭреЗрдВ:
- рдЪреИрдирд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬреАрд╡рди рдкрд░ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ;
- рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ;
- рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХреНрд╕ рдХреЗ рд▓реЙрдиреНрдЪ рдиреЗ рдЬреАрд╡рди рдХрд╛рд▓ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред
2. рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рд╕рд╣рд╡рд╛рд╕ рдХреИрд╕реЗ рдХрд░реЗрдВ?
рд▓реЗрдЦ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдбрдВрдк рдореЗрдВ, рдбреЗрдврд╝ рд╕рд╛рд▓ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВ: 1200 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ 53,000 рд▓реЗрдирджреЗрдиред рддрд╛рдХрд┐ рдЖрдк рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХреЗрдВ, рд╣рдордиреЗ MySQL рдФрд░ Grafana рдХреЗ рд╕рд╛рде рдПрдХ рдбреЙрдХ рдЗрдореЗрдЬ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдЦреБрдж рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ GitHub рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред
рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рдкреИрд╕рд╛ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд┐рд░ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рд╕реЗрд╡рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ 1 рдФрд░ 2 рдорд╣реАрдиреЗ рдмрд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдорд╣реАрдиреЗ рддрдХ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдорд╣реАрдиреЗ рдХреЗ рдЦрд░реНрдЪреЛрдВ рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓рд╛рдЧрддреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЖрджреЗрд╢, рдПрдХ рдорд╛рд╕рд┐рдХ рд╢реБрд▓реНрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдордпрдмрджреНрдз рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕реНрд░реЛрдд рдбреЗрдЯрд╛
рдЙрджрд╛рд╣рд░рдг MySQL рдореЗрдВ рдмрдиреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА DBMS рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:
рд╡реНрдпрдп рддрд╛рд▓рд┐рдХрд╛ - рдмрд┐рд▓рд┐рдВрдЧ:
рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢реБрд▓реНрдХ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рддрд┐рдерд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:
SELECT b.userId, b.Date, u.RegistrationDate FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
рдкрд░рд┐рдгрд╛рдо:
рд╣рдо рдорд╣реАрдиреЛрдВ рддрдХ рд╕рд╣рд╡рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рдорд╣реАрдиреЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ:
DATE_FORMAT(Date, '%Y-%m')
рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рддрдиреЗ рдорд╣реАрдиреЛрдВ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдерд╛ - рдпрд╣ рдмрд╣рд╕ рдХреЗ рдорд╣реАрдиреЗ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдорд╣реАрдиреЗ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИред MySQL рдореЗрдВ PERIOD_DIFF () рдлрд╝рдВрдХреНрд╢рди рд╣реИ - рджреЛ рдорд╣реАрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ред рдЕрдиреБрд░реЛрдз рдореЗрдВ PERIOD_DIFF () рдЬреЛрдбрд╝реЗрдВ:
SELECT b.userId, DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth, DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth, PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдорд╣реАрдиреЗ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧрд┐рдирддреЗ рд╣реИрдВ - рд╣рдо рдмрд┐рд▓рд┐рдВрдЧрдорд╛рд░реНрдЯ, рдкрдВрдЬреАрдХрд░рдгрдорд╛рд░реНрдЯ рдФрд░ рдордВрдерд┐рдл рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ:
SELECT COUNT(DISTINCT(b.userId)) AS UsersCount, DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth, DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth, PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId GROUP BY BillingMonth, RegistrationMonth, MonthsDiff
рдкрд░рд┐рдгрд╛рдо:
рдЬрдирд╡рд░реА, рдлрд░рд╡рд░реА рдФрд░ рдорд╛рд░реНрдЪ рдореЗрдВ, рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - MonthDiff = 0. рдПрдХ рдЬрдирд╡рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп рдерд╛ рдФрд░ рдлрд░рд╡рд░реА рдореЗрдВ RegistrationMonth = 2019-01, BillingMonth = 2019-02, рдФрд░ рдПрдХ рдлрд░рд╡рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рд░реНрдЪ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдерд╛ред
рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░, рдкреИрдЯрд░реНрди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
рдХреЛрдлрд╝реЛрд░реНрдЯреНрд╕ рдХреЛ рдЧреНрд░реЗрдлрд╝рд╛рдирд╛ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд░рд┐рдХреЙрд░реНрдб рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдВрджрд░ рдЯреЗрдмрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ!
рдЧреЛрд░рдлрд╛рдирд╛ рдореЗрдВ рд╕рд╣рдЧрд╛рдореА рдХреЛ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рд░реВрдкрдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдХреНрд╡реЗрд░реА рдЬреЛрдбрд╝реЗрдВ:
SELECT DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec, SUM(s.Users) AS value, s.RegistrationMonth AS metric FROM (
рдФрд░ рдбреЗрдЯрд╛ рдХреЛ Grafana рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
рдбреЗрдореЛ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд░реНрдЯ:
рдпрд╣ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВ:
GitHub рдЙрджрд╛рд╣рд░рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА MySQL рдФрд░ Grafana рдХреЗ рд╕рд╛рде рдПрдХ рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдирд╡рд░реА 2018 рд╕реЗ рдЬреБрд▓рд╛рдИ 2019 рддрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдврд╝ рд╕рд╛рд▓ рдХрд╛ рдбреЗрдореЛ рдбреЗрдЯрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЫрд╡рд┐ рдкрд░ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рд▓реЗрдЦ SQL рдореЗрдВ cohort рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
https://chartio.com/resources/tutorials/performing-cohort-analysis-using-mysql/
https://www.holistics.io/blog/calculate-cohort-retention-analysis-with-sql/