เด—เตเดฐเดพเดซเดพเดจเดฏเดฟเดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด•เต‚เดŸเตเดŸเด™เตเด™เดณเต† เด—เตเดฐเดพเดซเตเด•เดณเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเด‚ [+ เดกเต‹เด•เตเด•เตผ เดšเดฟเดคเตเดฐเด‚ เด‰เดฆเดพเดนเดฐเดฃเด‚]

เด—เตเดฐเดพเดซเดพเดจเดฏเดฟเดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด•เต‚เดŸเตเดŸเด™เตเด™เดณเต† เด—เตเดฐเดพเดซเตเด•เดณเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเด‚ [+ เดกเต‹เด•เตเด•เตผ เดšเดฟเดคเตเดฐเด‚ เด‰เดฆเดพเดนเดฐเดฃเด‚]

เด—เตเดฐเดพเดซเดพเดจ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเตŠเดฎเต‹เดชเตพเดŸเตเดŸเต เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เด•เต‚เดŸเตเดŸเด™เตเด™เดณเต† เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด‚ เดžเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเต.

เดชเตเดฐเต‹เดคเตเดธเดพเดนเดฟเดชเตเดชเดฟเด•เตเด•เตเด• - เดงเดพเดฐเดพเดณเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดณเตเดณ เดถเด•เตเดคเดฎเดพเดฏ เดธเต‡เดตเดจเด‚. 10 เดตเตผเดทเดคเตเดคเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเดฟเดŸเดฏเดฟเตฝ, เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต† เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเดจเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด’เดฐเต เดฆเดถเดฒเด•เตเดทเด‚ เด•เดตเดฟเดžเตเดžเต. เดธเดฎเดพเดจ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเต‡เดฐเดฟเดŸเตเดŸเดตเตผเด•เตเด•เต เดˆ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดจเดฟเดฐ เดเด•เดคเดพเดจเดคเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดณเดฐเต† เด…เด•เดฒเต†เดฏเดพเดฃเต†เดจเตเดจเต เด…เดฑเดฟเดฏเดพเด‚.

เด†เดฐเต‹ เดธเตˆเตป เด…เดชเตเดชเต เดšเต†เดฏเตเดคเต เดŽเดจเตเดจเต†เดจเตเดจเต‡เด•เตเด•เตเดฎเดพเดฏเดฟ "เด‰เดฑเด™เตเด™เดฟ". เด†เดฐเต‹ เด…เดตเดฐเตเดŸเต† เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดฎเดฑเดจเตเดจเต เด†เดฑเต เดฎเดพเดธเดคเตเดคเดฟเดจเดฟเดŸเต† เดฐเดฃเตเดŸเต เดคเดตเดฃ เด•เต‚เดŸเดฟ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดคเต. เด†เดฐเต‹ เด•เตเดฏเดพเดทเต เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเดฃเด‚ เด•เตŠเดฃเตเดŸเตเดตเดฐเตเดจเตเดจเต, เด’เดฐเดพเตพ เดธเต—เดœเดจเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเต เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ. เดชเดฟเดจเตเดจเต† เดŽเดฒเตเดฒเดพเดตเดฐเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เด•เตเดฑเดšเตเดšเต เดฒเดพเดญเด‚ เด•เดฟเดŸเตเดŸเดฟเดฏเดพเตฝ เดจเดจเตเดจเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

เดจเดฎเตเดฎเตเดŸเต‡เดคเต เดชเต‹เดฒเตเดณเตเดณ เดตเดฒเดฟเดฏ เดกเดพเดฑเตเดฑเดพ เดธเต†เดฑเตเดฑเตเด•เดณเดฟเตฝ, เด’เดฐเต เดตเตเดฏเด•เตเดคเดฟเด—เดค เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดชเต†เดฐเตเดฎเดพเดฑเตเดฑเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดธเต‚เด•เตเดทเตเดฎเดฎเดพเดฏ เดคเต€เดฐเตเดฎเดพเดจเด™เตเด™เตพ เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด…เตผเดคเตเดฅเดถเต‚เดจเตเดฏเดฎเดพเดฃเต. เดŽเดจเตเดจเดพเตฝ เดŸเตเดฐเต†เตปเดกเตเด•เตพ เดชเดฟเดŸเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดตเดฒเดฟเดฏ เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฃเต. เดžเด™เตเด™เตพ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต.

เดธเด‚เด—เตเดฐเดนเด‚

  1. เดŽเดจเตเดคเดพเดฃเต เด•เต‹เดนเต‹เตผเดŸเตเดŸเต เดตเดฟเดถเด•เดฒเดจเด‚, เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด…เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต?
  2. SQL-เตฝ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดฎเดพเดธเดคเตเดคเดฟเตฝ เดŽเด™เตเด™เดจเต† เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เตพ เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚.
  3. เด‡เดคเดฟเดฒเต‡เด•เตเด•เต เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เดณเต† เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚ เด—เตเดฐเดพเดซเดพเดจ.

เด•เต‹เดนเต‹เตผเดŸเตเดŸเต เดตเดฟเดถเด•เดฒเดจเด‚ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเตเด‚ เด…เดคเต SQL-เตฝ เดŽเด™เตเด™เดจเต† เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เด…เดฑเดฟเดฏเดพเดฎเต†เด™เตเด•เดฟเตฝ, เด…เดตเดธเดพเดจ เดญเดพเด—เดคเตเดคเต‡เด•เตเด•เต เดชเต‹เด•เตเด•.

1. เดŽเดจเตเดคเดพเดฃเต เด•เต‹เดนเต‹เตผเดŸเตเดŸเต เดตเดฟเดถเด•เดฒเดจเด‚, เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด…เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต?

เด•เต‹เดนเต‹เตผเดŸเตเดŸเต เดตเดฟเดถเด•เดฒเดจเด‚ เดŽเดจเตเดจเดคเต เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเต† (เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เตพ) เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เด’เดฐเต เดฐเต€เดคเดฟเดฏเดพเดฃเต. เดฎเดฟเด•เตเด•เดชเตเดชเต‹เดดเตเด‚, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟเดฏ เด†เดดเตโ€Œเดšเดฏเต‹ เดฎเดพเดธเดฎเต‹ เด…เดจเตเดธเดฐเดฟเดšเตเดšเดพเดฃเต เดžเด™เตเด™เดณเตเดŸเต† เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เดฐเต‚เดชเดชเตเดชเต†เดŸเตเดจเตเดจเดคเต. เด‡เดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เด†เดฏเตเดธเตเดธเต เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด’เดฐเต เดตเดฟเดถเด•เดฒเดจเด‚ เดจเดŸเดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดธเต‚เดšเด•เดฎเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเด•:

  • เดŽเด™เตเด™เดจเต† เดเดฑเตเดฑเต†เดŸเตเด•เตเด•เตฝ เดšเดพเดจเตฝ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดœเต€เดตเดฟเดคเดคเตเดคเต† เดธเตเดตเดพเดงเต€เดจเดฟเด•เตเด•เตเดจเตเดจเต;
  • เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดซเต€เดšเตเดšเดฑเดฟเดจเตเดฑเต†เดฏเต‹ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเต‹ เด‰เดชเดฏเต‹เด—เด‚ เดœเต€เดตเดฟเดคเดคเตเดคเต† เดŽเด™เตเด™เดจเต† เดฌเดพเดงเดฟเด•เตเด•เตเดจเตเดจเต;
  • เดซเต€เดšเตเดšเตผ เดŽเด•เตโ€Œเดธเดฟเดจเตเดฑเต† เดฒเต‹เดžเตเดšเต เด•เดดเดฟเดžเตเดž เดตเตผเดทเดคเตเดคเต† เด…เดชเต‡เด•เตเดทเดฟเดšเตเดšเต เดœเต€เดตเดฟเดคเด•เดพเดฒเดคเตเดคเต† เดŽเด™เตเด™เดจเต† เดฌเดพเดงเดฟเดšเตเดšเต.

2. SQL-เตฝ เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚?

เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเดตเตเด‚ เดธเดพเดฎเดพเดจเตเดฏเดฌเตเดฆเตเดงเดฟเดฏเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เดฏเดฅเดพเตผเดคเตเดฅ เดกเดพเดฑเตเดฑ เด‡เดตเดฟเดŸเต† เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ - เดŸเต†เดธเตเดฑเตเดฑเต เดกเดฎเตเดชเดฟเตฝ, เด’เดจเตเดจเดฐ เดตเตผเดทเดคเตเดคเต† เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ: 1200 เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเด‚ 53 เด‡เดŸเดชเดพเดŸเตเด•เดณเตเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เดกเดพเดฑเตเดฑ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เดณเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเตฝ, MySQL, Grafana เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด’เดฐเต เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เด…เดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพเด‚ เด…เดจเตเดญเดตเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเด‚ GitHub-เดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เต.

เดฒเดณเดฟเดคเดฎเดพเดฏ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เดณเตเดŸเต† เดธเตƒเดทเตเดŸเดฟ เดžเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดฟเด•เตเด•เตเด‚.

เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดธเต‡เดตเดจเด‚ เด‰เดฃเตเดŸเต†เดจเตเดจเต เด•เดฐเตเดคเตเด•. เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เด…เดตเดฟเดŸเต† เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดธเต‡เดตเดจเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดชเดฃเด‚ เดšเต†เดฒเดตเดดเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด•เดพเดฒเด•เตเดฐเดฎเต‡เดฃ, เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เดŽเดคเตเดฐ เด•เดพเดฒเด‚ เดœเต€เดตเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเตเด‚ เด…เดตเดฐเดฟเตฝ เดŽเดคเตเดฐ เดชเต‡เตผ เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเดฟเดจเตเดฑเต† 1-เด‰เด‚ 2-เดพเด‚ เดฎเดพเดธเดคเตเดคเดฟเดจเตเด‚ เดถเต‡เดทเด‚ เดตเต€เดดเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเดตเดฐเดพเดฃเต†เดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดˆ เดšเต‹เดฆเตเดฏเด™เตเด™เตพเด•เตเด•เต เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เดพเตป, เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดฎเดพเดธเดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดžเด™เตเด™เตพ เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด“เดฐเต‹ เดฎเดพเดธเดคเตเดคเต†เดฏเตเด‚ เดšเต†เดฒเดตเตเด•เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด…เดณเด•เตเด•เตเด‚. เดšเต†เดฒเดตเตเด•เตพเด•เตเด•เต เดชเด•เดฐเด‚, เด“เตผเดกเดฑเตเด•เตพ, เดธเดฌเตโ€Œเดธเตโ€Œเด•เตเดฐเดฟเดชเตโ€Œเดทเตป เดซเต€เดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเดฎเดฏเดพเดงเดฟเดทเตโ€Œเด เดฟเดค เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดŽเดจเตเดจเดฟเดต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚.

เดฑเต‹ เดกเดพเดฑเตเดฑ

เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ MySQL-เดฒเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เดŽเดจเตเดจเดพเตฝ เดฎเดฑเตเดฑเต DBMS-เด•เตพเด•เตเด•เต เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดตเตเดฏเดคเตเดฏเดพเดธเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด‰เดฃเตเดŸเดพเด•เดฐเตเดคเต.

เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดชเดŸเตเดŸเดฟเด• - เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ:

เดฏเต‚เดธเตผ เดเดกเดฟ
เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดคเต€เดฏเดคเดฟ

1
2019-01-01

2
2019-02-01

3
2019-02-10

4
2019-03-01

เดšเต†เดฒเดตเต เดชเดŸเตเดŸเดฟเด• - เดฌเดฟเดฒเตเดฒเดฟเด‚เด—เต:

เดฏเต‚เดธเตผ เดเดกเดฟ
เดคเต€เดฏเดคเดฟ
เดคเตเด•

1
2019-01-02
11

1
2019-02-22
11

2
2019-02-12
12

3
2019-02-11
13

3
2019-03-11
13

4
2019-03-01
14

4
2019-03-02
14

เดŽเดฒเตเดฒเดพ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดฑเตˆเดฑเตเดฑเต-เด“เดซเตเด•เดณเตเด‚ เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดคเต€เดฏเดคเดฟเดฏเตเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•:

SELECT 
  b.userId, 
  b.Date,
  u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId

เดซเดฒเด‚:

เดฏเต‚เดธเตผ เดเดกเดฟ
เดคเต€เดฏเดคเดฟ
เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดคเต€เดฏเดคเดฟ

1
2019-01-02
2019-01-02

1
2019-02-22
2019-01-02

2
2019-02-12
2019-02-01

3
2019-02-11
2019-02-10

3
2019-03-11
2019-02-10

4
2019-03-01
2019-03-01

4
2019-03-02
2019-03-01

เดžเด™เตเด™เตพ เดฎเดพเดธเด‚ เดคเต‹เดฑเตเด‚ เด•เต‚เดŸเตเดŸเตเด•เต†เดŸเตเดŸเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต; เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ เดคเต€เดฏเดคเดฟเด•เดณเตเด‚ เดฎเดพเดธเด™เตเด™เดณเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเตเดจเตเดจเต:

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

เดฏเต‚เดธเตผ เดเดกเดฟ
เดฌเดฟเดฒเตเดฒเดฟเด‚เด—เต เดฎเดพเดธเด‚
เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดคเต€เดฏเดคเดฟ
เดฎเดพเดธเด™เตเด™เตพ เดกเดฟเดซเต

1
2019-01
2019-01
0

1
2019-02
2019-01
1

2
2019-02
2019-02
0

3
2019-02
2019-02
0

3
2019-03
2019-02
1

4
2019-03
2019-03
0

4
2019-03
2019-03
0

เด“เดฐเต‹ เดฎเดพเดธเดตเตเด‚ เดธเดœเต€เดตเดฎเดพเด•เตเด•เดฟเดฏ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เดžเด™เตเด™เตพ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต - BillingMonth, RegistrationMonth, MonthsDiff เดŽเดจเตเดจเดฟเดต เดชเตเดฐเด•เดพเดฐเด‚ เดžเด™เตเด™เตพ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เด—เตเดฐเต‚เดชเตเดชเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต:

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

เดซเดฒเด‚:

เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚
เดฌเดฟเดฒเตเดฒเดฟเด‚เด—เต เดฎเดพเดธเด‚
เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดฎเดพเดธเด‚
เดฎเดพเดธเด™เตเด™เตพ เดกเดฟเดซเต

1
2019-01
2019-01
0

1
2019-02
2019-01
1

2
2019-02
2019-02
0

1
2019-03
2019-02
1

1
2019-03
2019-03
0

เดœเดจเตเดตเดฐเดฟ, เดซเต†เดฌเตเดฐเตเดตเดฐเดฟ, เดฎเดพเตผเดšเตเดšเต เดฎเดพเดธเด™เตเด™เดณเดฟเตฝ เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเตเด‚ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต - MonthsDiff = 0. เด’เดฐเต เดœเดจเตเดตเดฐเดฟ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดซเต†เดฌเตเดฐเตเดตเดฐเดฟเดฏเดฟเตฝ เดธเดœเต€เดตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต - RegistrationMonth = 2019-01, BillingMonth = 2019-02, เด’เดฐเต เดซเต†เดฌเตเดฐเตเดตเดฐเดฟ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดฎเดพเตผเดšเตเดšเดฟเตฝ เดธเดœเต€เดตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚, เด’เดฐเต เดตเดฒเดฟเดฏ เดกเดพเดฑเตเดฑเดพ เดธเต†เดฑเตเดฑเดฟเตฝ เดชเดพเดฑเตเดฑเต‡เดฃเตเด•เตพ เดจเดจเตเดจเดพเดฏเดฟ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚.

เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เดณเต† เด—เตเดฐเดพเดซเดพเดจเดฏเดฟเดฒเต‡เด•เตเด•เต เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚

เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เดฐเต‚เดชเต€เด•เดฐเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเด เดฟเดšเตเดšเต, เดŽเดจเตเดจเดพเตฝ เดงเดพเดฐเดพเดณเด‚ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เด‰เดณเตเดณเดชเตเดชเต‹เตพ, เด…เดต เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดฒเตเดฒ. เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ Excel-เดฒเต‡เด•เตเด•เต เด•เดฏเดฑเตเดฑเตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฎเดจเต‹เดนเดฐเดฎเดพเดฏ เดชเดŸเตเดŸเดฟเด•เด•เดณเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดžเด™เตเด™เดณเตเดŸเต† เดฐเต€เดคเดฟเดฏเดฒเตเดฒ!

เด‡เตปเดฑเดฑเดพเด•เตเดฑเตเดฑเต€เดตเต เด—เตเดฐเดพเดซเดพเดฏเดฟ เด•เต‹เดนเต‹เตผเดŸเตเดŸเตเด•เดณเต† เด•เดพเดฃเดฟเด•เตเด•เดพเด‚ เด—เตเดฐเดพเดซเดพเดจ.

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เด—เตเดฐเดพเดซเดพเดจเดฏเตเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด’เดฐเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดกเดพเดฑเตเดฑ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เดฎเดฑเตเดฑเตŠเดฐเต เดšเต‹เดฆเตเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต:

SELECT
  DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
  SUM(s.Users) AS value,
  s.RegistrationMonth AS metric
FROM (
  ## ัั‚ะฐั€ั‹ะน ะทะฐะฟั€ะพั, ะฒะพะทะฒั€ะฐั‰ะฐัŽั‰ะธะน ะบะพะณะพั€ั‚ั‹
  SELECT 
    COUNT(DISTINCT(b.userId)) AS Users, 
    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
  WHERE
    u.RegistrationDate BETWEEN '2018-01-01' AND CURRENT_DATE
  GROUP BY 
    BillingMonth, RegistrationMonth, MonthsDiff 
) AS s
GROUP BY 
  time_sec, metric

เด•เต‚เดŸเดพเดคเต† เด—เตเดฐเดพเดซเดพเดจเดฏเดฟเดฒเต‡เด•เตเด•เต เดกเดพเดฑเตเดฑ เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•.

เดจเดฟเดจเตเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃ เด—เตเดฐเดพเดซเต เดกเต†เดฎเต‹:

เด—เตเดฐเดพเดซเดพเดจเดฏเดฟเดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด•เต‚เดŸเตเดŸเด™เตเด™เดณเต† เด—เตเดฐเดพเดซเตเด•เดณเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเด‚ [+ เดกเต‹เด•เตเด•เตผ เดšเดฟเดคเตเดฐเด‚ เด‰เดฆเดพเดนเดฐเดฃเด‚]

เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตˆเด•เตŠเดฃเตเดŸเต เดธเตเดชเตผเดถเดฟเด•เตเด•เตเด•:

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเต‹เดŸเตŠเดชเตเดชเด‚ GitHub เดถเต‡เด–เดฐเด‚ MySQL เด‰เด‚ เด—เตเดฐเดพเดซเดพเดจเดฏเตเด‚ เด‰เดณเตเดณ เด’เดฐเต เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เด†เดฃเต, เด…เดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ 2018 เดœเดจเตเดตเดฐเดฟ เดฎเตเดคเตฝ 2019 เดœเต‚เดฒเตˆ เดตเดฐเต†เดฏเตเดณเตเดณ เด’เดจเตเดจเดฐ เดตเตผเดทเดคเตเดคเต‡เด•เตเด•เตเดณเตเดณ เดกเต†เดฎเต‹ เดกเดพเดฑเตเดฑ เด‡เดคเดฟเดจเด•เด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดˆ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเด‚.

SQL-เดฒเต† เด•เต‹เดนเต‹เตผเดŸเตเดŸเต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ PS เดฒเต‡เด–เดจเด™เตเด™เตพ:

https://chartio.com/resources/tutorials/performing-cohort-analysis-using-mysql/

https://www.holistics.io/blog/calculate-cohort-retention-analysis-with-sql/

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•