は、あなたの表は、このようなものですと仮定します。
これは、各人物の行を「シャッフル」することで行います。最初に人によってテーブルをソートし、その人の行をランダム化します。 ORDER BY person_id, RAND()
を使用してこれを行うことができます。
次に、各人物の最初の行を選択します。これは、行番号を追跡し、各個別のPERSON_IDで1から行番号を開始するには、MySQLのセッション変数を使用して、これを行う方法です:MySQLの8.0は、(おそらく2018年)出てくるとき
SELECT person_id, product_id, transaction_date
FROM (
SELECT IF(@p=person_id, @r:[email protected]+1, 1) AS row_num
@p:=person_id AS person_id, product_id, transaction_date
FROM (SELECT @p:=0, @r:=0) AS _init
CROSS JOIN MyTable
ORDER BY person_id, RAND()
) AS T
WHERE row_num = 1;
、それが実装する必要があります
SELECT person_id, product_id, transaction_date
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY RAND()) AS row_num,
person_id, product_id, transaction_date
FROM MyTable
) AS T
WHERE row_num = 1;
PS:あなたはSQLについての質問をしたときにところで、あなたはSHOW CREATE TABLE MyTable
を実行して、あなたの質問に結果が含まれている必要があり、このもう少し標準になりますウィンドウ機能、。これは、人々があなたのテーブル、カラム、インデックス、データタイプなどを推測する必要がなくなり、必要なものに近い例を書くことができるようになります。
どのように "ランダム"、どのsql? 'sql-server'は通常、MySQLと同じではないMS SQL Serverを示します。 – Uueerdo
答えは、使用しているDBMSの答えに大きく依存します。データベースの世界では、顧客の購入をトランザクションと混同しないでください。これらは非常に異なるものです。 –
データスキーマに関する詳細情報も提供する必要があります。これらのレコードは1つのテーブルにありますか?主キーはありますか?あなたの目標を達成するために、サブクエリを使ってクエリを書く必要があるかもしれません。 – htm11h