У меня есть одна таблица, которая записывает доставку некоторых продуктов клиентам. Его принципиальная схема очень проста:Как вычислить количество последовательностей в предложении в SQLite?
| DeliveryDate | IdClient | IdProduct | Quantity | Cost |
Ну, один предположение о том, что клиенты могут приобрести только один пункт в то время, и они начинают закупать ITEM1, в конце концов, они могут изменить и начать покупать ITEM2, останавливая от покупки ITEM1 , и так далее. Это не означает 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 |
мне удалось получить все, кроме число последовательности, вместо этого, с предложением sql, написанным ниже, я могу получить количество разных продуктов purc 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, создавая временную таблицу, и после этого я бегу фактический запрос):
// 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
Спасибо, Партхадж, вы были правы, я не написал это очень ясно. – raululm