【SQL】初めの数文字が一致してたら同一データと見なすSQLを考える

■ はじめに

初めの数文字が一致してたら同一データと見なし、
重複を排除するSQL文を考える

目次

【1】解決案
【2】サンプル

 【1】解決案

以下を使えば可能。

 * サブクエリ
 * LEFT()
 * GROUP BY

 【2】サンプル

* DB : MySQL5.7

 テーブル

CREATE TABLE `message` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `message_text` TEXT NULL,
  PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

 データ

INSERT INTO `message` (`id`, `message_text`) VALUES (1, 'Thank you for your attention.');
INSERT INTO `message` (`id`, `message_text`) VALUES (2, 'Thank you for asking');
INSERT INTO `message` (`id`, `message_text`) VALUES (3, 'Sorry to be late.');
INSERT INTO `message` (`id`, `message_text`) VALUES (4, 'Thank you for your advise.');
INSERT INTO `message` (`id`, `message_text`) VALUES (5, 'Sorry...');

 SQL

SELECT
 * 
FROM
 message AS m
WHERE
 m.id IN (
 SELECT
  MIN(id)
 FROM
  message AS sub_m
 GROUP BY
  LEFT(sub_m.message_text, 5)
 )

 出力結果

id | message_text
---+------------------------------
1  | Thank you for your attention.
3  | Sorry to be late.

関連記事

サブクエリ / 副問合せ
https://dk521123.hatenablog.com/entry/2015/12/21/002727
過去直近データを取得するには
https://dk521123.hatenablog.com/entry/2016/01/05/234938
最新日付データを取得するには
https://dk521123.hatenablog.com/entry/2014/10/09/004105
期間が重なるデータを取得するには
https://dk521123.hatenablog.com/entry/2011/12/17/025502
順位付け・ランキング ~ RANK / DENSE_RANK ~
https://dk521123.hatenablog.com/entry/2012/08/15/225233