เจ—เฉเจฐเจพเจซเจพเจจเจพ เจตเจฟเฉฑเจš เจ—เฉเจฐเจพเจซเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจธเจฎเฉ‚เจนเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจเจพ เจนเฉˆ [เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ]

เจ—เฉเจฐเจพเจซเจพเจจเจพ เจตเจฟเฉฑเจš เจ—เฉเจฐเจพเจซเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจธเจฎเฉ‚เจนเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจเจพ เจนเฉˆ [เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ]

เจ…เจธเฉ€เจ‚ Grafana เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจชเฉเจฐเฉ‹เจฎเฉ‹เจชเจฒเจŸ เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจธเจฎเฉ‚เจนเจพเจ‚ เจฆเฉ€ เจ•เจฒเจชเจจเจพ เจ•เจฐเจจ เจฆเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจนเฉฑเจฒ เจ•เฉ€เจคเจพเฅค

เจชเฉเจฐเจšเจพเจฐ - เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจธเฉ‡เจตเจพเฅค เจธเฉฐเจšเจพเจฒเจจ เจฆเฉ‡ 10 เจธเจพเจฒเจพเจ‚ เจตเจฟเฉฑเจš, เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ‡เฉฑเจ• เจฎเจฟเจฒเฉ€เจ…เจจ เจคเฉ‹เจ‚ เจตเฉฑเจง เจ—เจˆ เจนเฉˆเฅค เจœเจฟเจจเฉเจนเจพเจ‚ เจฒเฉ‹เจ•เจพเจ‚ เจจเฉ‡ เจธเจฎเจพเจจ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจ‰เจน เจœเจพเจฃเจฆเฉ‡ เจนเจจ เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ€ เจ‡เจน เจฒเฉœเฉ€ เจ‡เจ•เฉ‹ เจœเจฟเจนเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจ•เจฟเจธเฉ‡ เจจเฉ‡ เจธเจพเจˆเจจ เจ…เฉฑเจช เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจนเจฎเฉ‡เจธเจผเจพ เจฒเจˆ "เจธเฉŒเจ‚ เจ—เจฟเจ†"เฅค เจ•เฉ‹เจˆ เจตเจฟเจ…เจ•เจคเฉ€ เจ†เจชเจฃเจพ เจชเจพเจธเจตเจฐเจก เจญเฉเฉฑเจฒ เจ—เจฟเจ† เจ…เจคเฉ‡ เจ›เฉ‡ เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ เจฆเฉ‹ เจตเจพเจฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เฉ€เจคเจพเฅค เจ•เฉ‹เจˆ เจ•เฉˆเจธเจผ เจฐเจœเจฟเจธเจŸเจฐ เจตเจฟเฉฑเจš เจชเฉˆเจธเฉ‡ เจฒเจฟเจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เฉ‹เจˆ เจฎเฉเจซเจค เจตเจฟเฉฑเจš เจ†เจ‡เจ† เจธเฉ€ เจฏเฉฐเจคเจฐ. เจ…เจคเฉ‡ เจนเจฐ เจ•เจฟเจธเฉ‡ เจคเฉ‹เจ‚ เจ•เฉเจ เจฒเจพเจญ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเฉฐเจ—เจพ เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจธเจพเจกเฉ‡ เจตเจฐเจ—เฉ‡ เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจธเฉˆเฉฑเจŸเจพเจ‚ 'เจคเฉ‡, เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจตเจฟเจตเจนเจพเจฐ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจธเฉ‚เจ–เจฎ-เจซเฉˆเจธเจฒเฉ‡ เจฒเฉˆเจฃเจพ เจฌเฉ‡เจ•เจพเจฐ เจนเฉˆเฅค เจชเจฐ เจฐเฉเจเจพเจจ เจจเฉ‚เฉฐ เจซเฉœเจจเจพ เจ…เจคเฉ‡ เจตเฉฑเจกเฉ‡ เจธเจฎเฉ‚เจนเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจ…เจคเฉ‡ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆเฅค เจœเฉ‹ เจฌเจฟเจฒเจ•เฉเจฒ เจ…เจธเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเฉฐเจ–เฉ‡เจช

  1. เจธเจฎเฉ‚เจน เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจ•เจฟเจ‰เจ‚ เจนเฉˆ?
  2. SQL เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ เจฆเฉ‡ เจฎเจนเฉ€เจจเฉ‡ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจนเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เฅค
  3. เจธเจฎเฉ‚เจนเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจเจพ เจนเฉˆ เจ—เฉเจฐเจพเจซเจจเจพ.

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจธเจฎเฉ‚เจน เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ SQL เจตเจฟเฉฑเจš เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจนเฉˆ, เจคเจพเจ‚ เจธเจฟเฉฑเจงเฉ‡ เจ†เจ–เจฐเฉ€ เจญเจพเจ— 'เจคเฉ‡ เจœเจพเจ“เฅค

1. เจธเจฎเฉ‚เจน เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจ•เจฟเจ‰เจ‚ เจนเฉˆ?

เจ•เฉ‹เจนเฉ‹เจฐเจŸ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฎเฉ‚เจนเจพเจ‚ (เจธเจนเจฟเจฏเฉ‹เจ—เฉ€เจ†เจ‚) เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เจฐเจจ 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจ‡เฉฑเจ• เจคเจฐเฉ€เจ•เจพ เจนเฉˆเฅค เจ…เจ•เจธเจฐ, เจธเจพเจกเฉ‡ เจธเจฎเฉ‚เจน เจ‰เจธ เจนเจซเจผเจคเฉ‡ เจœเจพเจ‚ เจฎเจนเฉ€เจจเฉ‡ เจฆเฉเจ†เจฐเจพ เจฌเจฃเจพเจ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‡ เจธเฉ‡เจตเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเฉ€ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเฉ€ เจธเฉ€เฅค เจ‡เฉฑเจฅเฉ‹เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจœเฉ€เจตเจจ เจ•เจพเจฒ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจ‡เฉฑเจ• เจธเฉ‚เจšเจ• เจนเฉˆ เจœเจฟเจธเจฆเฉ‡ เจ…เจงเจพเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจธเจฎเจเฉ‹:

  • เจชเฉเจฐเจพเจชเจคเฉ€ เจšเฉˆเจจเจฒ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจœเฉ€เจตเจจ เจ•เจพเจฒ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ;
  • เจ•เจฟเจธเฉ‡ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจœเจพเจ‚ เจธเฉ‡เจตเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจœเฉ€เจตเจจ เจญเจฐ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ;
  • เจซเฉ€เจšเจฐ X เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจจเฉ‡ เจชเจฟเจ›เจฒเฉ‡ เจธเจพเจฒ เจฆเฉ‡ เจฎเฉเจ•เจพเจฌเจฒเฉ‡ เจœเฉ€เจตเจจ เจ•เจพเจฒ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เฉ€เจคเจพเฅค

2. SQL เจตเจฟเฉฑเจš เจ•เฉ‹เจนเฉ‹เจฐเจŸ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡?

เจฒเฉ‡เจ– เจฆเจพ เจ†เจ•เจพเจฐ เจ…เจคเฉ‡ เจ†เจฎ เจธเจฎเจ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจฅเฉ‡ เจธเจพเจกเฉ‡ เจ…เจธเจฒ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจชเฉ‡เจธเจผ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเฉ€ - เจŸเฉˆเจธเจŸ เจกเฉฐเจช เจตเจฟเฉฑเจš, เจกเฉ‡เจข เจธเจพเจฒ เจฆเฉ‡ เจ…เฉฐเจ•เฉœเฉ‡: 1200 เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ…เจคเฉ‡ 53 เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจเจพเจ‚. เจคเจพเจ‚ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจกเฉ‡เจŸเจพ เจจเจพเจฒ เจ–เฉ‡เจก เจธเจ•เฉ‹, เจ…เจธเฉ€เจ‚ MySQL เจ…เจคเฉ‡ Grafana เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจคเฉเจธเฉ€เจ‚ เจ‡เจน เจธเจญ เจ†เจชเจฃเฉ‡ เจ†เจช เจ…เจจเฉเจญเจต เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจฒเฉ‡เจ– เจฆเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš GitHub เจจเจพเจฒ เจฒเจฟเฉฐเจ• เจ•เจฐเฉ‹.

เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจฐเจฒ เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจฎเฉ‚เจนเจพเจ‚ เจฆเฉ€ เจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจšเจฒเฉ‹ เจฎเฉฐเจจ เจฒเจ“ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจนเฉˆเฅค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ‰เฉฑเจฅเฉ‡ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚ 'เจคเฉ‡ เจชเฉˆเจธเจพ เจ–เจฐเจš เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ›เฉฑเจก เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจ. เจ…เจธเฉ€เจ‚ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ•เจฟเฉฐเจจเฉ€ เจฆเฉ‡เจฐ เจคเฉฑเจ• เจœเฉ€เจ‰เจ‚เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เจฟเฉฐเจจเฉ‡ เจธเฉ‡เจตเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจ…เจคเฉ‡ เจฆเฉ‚เจœเฉ‡ เจฎเจนเฉ€เจจเฉ‡ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจฌเฉฐเจฆ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจ‡เจนเจจเจพเจ‚ เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ เจฆเฉ‡เจฃ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ เจฆเฉ‡ เจฎเจนเฉ€เจจเฉ‡ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจธเจฎเฉ‚เจน เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจนเจฐ เจฎเจนเฉ€เจจเฉ‡ เจ–เจฐเจšเจฟเจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจ—เจคเฉ€เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจฎเจพเจชเจพเจ‚เจ—เฉ‡เฅค เจ–เจฐเจšเจฟเจ†เจ‚ เจฆเฉ€ เจฌเจœเจพเจ, เจ†เจฐเจกเจฐ, เจ—เจพเจนเจ•เฉ€ เจซเฉ€เจธ, เจœเจพเจ‚ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจธเจฎเจพเจ‚-เจ…เจงเจพเจฐเจฟเจค เจ—เจคเฉ€เจตเจฟเจงเฉ€ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจกเฉ‡เจŸเจพ

เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจจเฉ‚เฉฐ 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

เจฏเฉ‚เจœเจฐ เจ†เจˆเจกเฉ€
เจฌเจฟเจฒเจฟเฉฐเจ— เจฎเจนเฉ€เจจเจพ
เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ เจฆเฉ€ เจฎเจฟเจคเฉ€
MonthsDiff

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

เจ…เจธเฉ€เจ‚ เจนเจฐ เจฎเจนเฉ€เจจเฉ‡ เจธเจฐเจ—เจฐเจฎ เจ•เฉ€เจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ - เจ…เจธเฉ€เจ‚ เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฟเจฒเจฟเฉฐเจ—เจฎเฉ‹เจ‚เจฅ, เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจเจฎเฉ‹เจ‚เจฅ เจ…เจคเฉ‡ เจฎเจนเฉ€เจจเจพ เจกเจฟเจซ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจน เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

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

เจจเจคเฉ€เจœเจพ:

เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ—เจฟเจฃเจคเฉ€
เจฌเจฟเจฒเจฟเฉฐเจ— เจฎเจนเฉ€เจจเจพ
เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ เจฎเจนเฉ€เจจเจพ
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, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจซเจฐเจตเจฐเฉ€ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฎเจพเจฐเจš เจตเจฟเฉฑเจš เจธเจฐเจ—เจฐเจฎ เจธเฉ€เฅค

เจ•เฉเจฆเจฐเจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจชเฉˆเจŸเจฐเจจ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจธเฉˆเฉฑเจŸ เจตเจฟเฉฑเจš เจฌเจฟเจนเจคเจฐ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจเฅค

เจธเจฎเฉ‚เจนเจพเจ‚ เจจเฉ‚เฉฐ เจ—เฉเจฐเจพเจซเจพเจจเจพ เจตเจฟเฉฑเจš เจ•เจฟเจตเฉ‡เจ‚ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจเจพ เจนเฉˆ

เจ…เจธเฉ€เจ‚ เจธเจฟเฉฑเจ–เจฟเจ† เจนเฉˆ เจ•เจฟ เจธเจฎเฉ‚เจน เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ, เจชเจฐ เจœเจฆเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฐเจฟเจ•เจพเจฐเจก เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจเจพ เจนเฉเจฃ เจ†เจธเจพเจจ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจเจ•เจธเจฒ เจตเจฟเฉฑเจš เจจเจฟเจฐเจฏเจพเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเฉเฉฐเจฆเจฐ เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจธเจพเจกเจพ เจคเจฐเฉ€เจ•เจพ เจจเจนเฉ€เจ‚ เจนเฉˆ!

เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ‡เฉฐเจŸเจฐเจเจ•เจŸเจฟเจต เจ—เฉเจฐเจพเจซ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉ‹เจนเฉ‹เจฐเจŸ เจฆเจฟเจ–เจพเจ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ เจ—เฉเจฐเจพเจซเจจเจพ.

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ—เฉเจฐเจพเจซเจพเจจเจพ เจฒเจˆ เจขเฉเจ•เจตเฉ‡เจ‚ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจธเจผเจพเจฎเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

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 เจ…เจคเฉ‡ Grafana เจจเจพเจฒ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจนเฉˆ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ 'เจคเฉ‡ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจœเจจเจตเจฐเฉ€ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹