私は大きな問題を抱えています。誰かが私に手を貸してくれませんか?
私の最初の目的は、重複データをクエリステートメント(削除ではなく選択)でfliterすることです。つまり、フィードバックが繰り返されるため、同じServiceIDのEndTimeとQosのさまざまなエントリが表示されます。ルールは、同じServiceIDのQosが最も低いレコードのみを保持することです。Qosが最も低いレコードが複数ある場合は、これらのレコードのいずれか1つだけを保持します。クライアントはこのスキームを受け入れ、それを好みます。この例では、ID = 6,7、および8の場合、6または7を保持します。この目的の答えはここにあります。
SELECT DISTINCT serviceid,tcid,endtime,qos
FROM (SELECT *
FROM service
ORDER BY serviceid, qos, id) AS base
GROUP BY serviceid
aim2:Qos=1はSatisfiedServiceを表します。各テクニカルサポートエンジニアによって達成された月間合計満足サービスは、「今月の個人合計満足サービス」と呼ばれます。「今月のパーソナルトータル満足サービス」がその月のトップ2にランクインしているテクニカルサポートエンジニアを「今月からのトップ2」と呼びます。毎月「今月からトップ2」を獲得できるほど優秀な場合は、「クラス1優秀」と呼ぶことができます。全体として、このステップは「クラス1の卓越性」を計算することです。この例では、1月の「今月以降のトップ2」はAndrewとJacobであり、2月の「Top2」はAndrew、Dlyan、およびJacobです。そのため、アンドリューとジェイコブ(この2台のレコーダーのみ)に「クラス1の傑出した」という栄誉の称号が授与されます。
aim2を手伝ってください(最終的には目標4に到達する必要があります)、目標2の結果は次のようになります。
TCID アンドリュー ジェイコブ説明:年間を通じていくつかの技術サービスデータ(ServiceID、TCID、EndTime、およびQoS)があり、重複があるため、IDは一意の主キーです。
念のために言っておきますが、クライアントはSQLを実装するために、データベース内のストアドプロシージャではなく、SQLのみを受け入れます。そして、顧客がデータベースの作成を許可しなかったため、クエリステートメントのみが必要です。
some data:
ServiceID ID TCID EndTime Qos 20002ジェイコブ2011/1/12 20003ジェイコブ2011/1/12 20014ジェイコブ2011/1/12 20025ジェイコブ2011/2/31 20036タイラー2011/1/41
データ構造:
- ID:レコードの一意の主キー
- ServiceID:特定のサービスのID
- TCID:テクニカルサポートエンジニアのID
- EndTime:サービスの終了時間
- Qos:サービス品質(1満足、2平均、3不満足/不満)。
DDLと挿入SQL(mysql5):
CREATE TABLE `service` (
`ServiceID` INTEGER(11) NOT NULL,
`ID` INTEGER(11) NOT NULL ,
`TCID` VARCHAR(40) NOT NULL,
`EndTime` DATE NOT NULL,
`Qos` CHAR(1) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `ID` (`ID`)
);
COMMIT;
INSERT INTO `service` (`ServiceID`, `ID`, `TCID`, `EndTime`, `Qos`) VALUES
(2004, 9, 'Jacob', '2011-02-04', '1'),
(2000, 2, 'Jacob', '2011-01-01', '2'),
(2000, 3, 'Jacob', '2011-01-01', '2'),
(2001, 4, 'Jacob', '2011-01-01', '2'),
(2002, 5, 'Jacob', '2011-02-03', '1'),
(2003, 6, 'Tyler', '2011-01-04', '1'),
(2003, 7, 'Tyler', '2011-01-04', '1'),
(2003, 8, 'Tyler', '2011-01-03', '2'),
(2005, 10, 'Jacob', '2011-02-05', '1'),
(2006, 11, 'Jacob', '2011-02-04', '2'),
(2007, 12, 'Jacob', '2011-01-08', '1'),
(2008, 13, 'Tyler', '2011-02-06', '1'),
(2009, 14, 'Dylan', '2011-02-08', '1'),
(2010, 15, 'Dylan', '2011-02-09', '1'),
(2014, 16, 'Andrew', '2011-01-01', '1'),
(2013, 17, 'Andrew', '2011-01-01', '1'),
(2012, 18, 'Andrew', '2011-02-19', '1'),
(2011, 19, 'Andrew', '2011-02-02', '1'),
(2015, 20, 'Andrew', '2011-02-01', '1'),
(2016, 21, 'Andrew', '2011-01-19', '1'),
(2017, 22, 'Jacob', '2011-01-01', '1'),
(2018, 23, 'Dylan', '2011-02-03', '1'),
(2019, 24, 'Dylan', '2011-01-09', '1'),
(2020, 25, 'Dylan', '2011-01-01', '1'),
(2021, 26, 'Andrew', '2011-01-03', '1'),
(2021, 27, 'Dylan', '2011-01-11', '1'),
(2022, 28, 'Jacob', '2011-01-09', '1'),
(2023, 29, 'Tyler', '2011-01-19', '1'),
(2024, 30, 'Andrew', '2011-02-01', '1'),
(2025, 31, 'Dylan', '2011-02-03', '1'),
(2026, 32, 'Jacob', '2011-02-04', '1'),
(2027, 33, 'Tyler', '2011-02-09', '1'),
(2028, 34, 'Daniel', '2011-01-06', '1'),
(2029, 35, 'Daniel', '2011-02-01', '1');
COMMIT;
これが私の最初の2つの目的であり、さらに2つあります。これらのすべてのステップを、次々に完了することを目的としています。誰かが最初の目標を達成するのを手伝ってもらえますか?かなり複雑で、よろしくお願いします。
目標3:次に、「クラス2の優秀」(「今月以降のトップ2」のエンジニアは含まれていません)を計算することは、3位と4位のランクを計算することと同じです。この例では、「クラス2の傑出」はタイラーです。
目標4:最終目標は、「クラス1の卓越性」と「クラス2の卓越性」を組み合わせることです。結果は最終的にレンダリング用のレポートに転送されます。私のデータセットは次のようになります。
TCID level
Andrew top2
Jacob top2
Tyler top4
目標1の結果は次のようになります。
20002ジェイコブ2011/1/12 20014ジェイコブ2011/1/12 20025ジェイコブ2011/2/31 20036タイラー2011/1/41 20049ジェイコブ2011/2/41 200510ジェイコブ2011/2/51 200611ジェイコブ2011/2/42 200712ジェイコブ2011/1/81 200813タイラー2011/2/61 200914ディラ2011/2/81 2010 15 Dyla 2011/2/9 1 201119アンドリュー2011/2/21 201218アンドリュー2011/2/191 201317アンドリュー2011/1/11 201416アンドリュー2011/1/11 201520アンドリュー2011/2/11 201621アンドリュー2011/1/191 201722ジェイコブ2011/1/11 2018 23 Dyla 2011/2/3 1 2019 24 Dyla 2011/1/9 1 2020 25 Dyla 2011/1/1 1 202126アンドリュー2011/1/31 202228ジェイコブ2011/1/91 202329タイラー2011/1/191 202430アンドリュー2011/2/11 2025 31 Dyla 2011/2/3 1 202632ジェイコブ2011/2/41 202733タイラー2011/2/91 202834ダニエル2011/1/61 202935ダニエル2011/2/11