私はいくつかの製品の配送を顧客に記録するテーブルを1つ持っています。その基本的な仕組みは非常に簡単です:SQLiteで文のシーケンスの数を計算する方法は?
| DeliveryDate | IdClient | IdProduct | Quantity | Cost |
まあ、1つの仮定は、アイテム1を買ってから停止し、最終的に彼らは変更とアイテム2を買い始めることができ、クライアントは一度に一つのアイテムを購入することができ、そして、彼らはアイテム1を購入し始めるということです、 等々。これは、Item1、Item2、...、ItemNが常に同じ商品であることを意味するものではなく、異なる可能性があります。
私が望むのは、最初の購入日と各顧客のそれぞれの商品のシーケンス数で、各顧客について購入したさまざまな商品を手に入れることができることです。買うだろう。この方式では:
| IdClient | IdProduct | FirstTimeDate | NumSequence |
私はサンプルで説明しましょう:
表:
| DeliveryDate | IdClient | IdProduct | Quantity | Cost |
| 2016-05-01 | 1234 | 9876 | 2 | 1000 |
| 2016-06-01 | 1234 | 9876 | 1 | 500 |
| 2016-07-01 | 1234 | 8765 | 2 | 2000 |
| 2016-08-01 | 1234 | 5432 | 3 | 3500 |
| 2016-06-01 | 3456 | 5432 | 2 | 1500 |
| 2016-07-01 | 3456 | 5432 | 1 | 700 |
| 2016-08-01 | 3456 | 9523 | 2 | 2500 |
所望の出力:
| IdClient | IdProduct | FirstTimeDate | NumSequence |
| 1234 | 9876 | 2016-05-01 | 1 |
| 1234 | 8765 | 2016-07-01 | 2 |
| 1234 | 5432 | 2016-08-01 | 3 |
| 3456 | 5432 | 2016-06-01 | 1 |
| 3456 | 9523 | 2016-08-01 | 2 |
私は除いて、すべてを取得するために管理することができ順序の数、その代わりに、私はさまざまな製品purcの数を得ることができる下に書かれたSQL文クライアントごとがhased:
| IdClient | IdProduct | FirstTimeDate | NumOfDistinctProducts |
| 1234 | 9876 | 2016-05-01 | 3 |
| 1234 | 8765 | 2016-07-01 | 3 |
| 1234 | 5432 | 2016-08-01 | 3 |
| 3456 | 5432 | 2016-06-01 | 2 |
| 3456 | 9523 | 2016-08-01 | 2 |
とSQL(簡単にするために、私は一時テーブルを作成する最初のSQLを実行し、その後、私は、実際のクエリを実行):
// Query to create the temporary table:
CREATE TEMPORARY TABLE tmpNewDelivering AS WITH FT_CTE AS (
SELECT min(Date) ChangeDate,* FROM Deliverings WHERE Deliverings.IdProduct IN (// Actual IdProducts //)
GROUP BY IdProduct, IdPatient
ORDER BY Deliverings.Date ASC
)
SELECT * from FT_CTE;
// Query I want to improve:
SELECT case when C.StartDate = tND.ChangeDate then "Start" else "Change" end Type, C.NumProducts NumProducts, tND.*
FROM tmpNewDelivering tND INNER JOIN (
SELECT IdClient, count(IdProduct) NumProducts, min(ChangeDate) StartDate
FROM tmpNewDelivering
GROUP BY IdClient
) C ON tND.IdClient = C.IdClient
ORDER BY tCN.Fecha DESC
ありがとうPartharaj、あなたは正しく、私はそれを非常に明確に書かなかった。 – raululm