我正在嘗試從表中獲取 product_id、日期和總重復項。該表包含 id、product_id、price、批發價格、date_add 和更多欄位。目前有超過一百萬行添加了產品來查找產品的價格歷史記錄。但是有些產品具有 product_id 和日期的雙重值。例如:
| id_price_history | id_product | 價格 | 日期_添加 |
|---|---|---|---|
| 1 | 1 | 6.95 | 2021-11-15 12:12:15 |
| 2 | 1 | 6.95 | 2021-11-15 12:14:25 |
| 3 | 2 | 4.95 | 2021-11-16 10:18:45 |
| 4 | 2 | 4.95 | 2021-11-16 11:18:55 |
| 5 | 3 | 8.95 | 2021-12-15 14:12:15 |
| 6 | 1 | 7.95 | 2021-12-16 12:14:25 |
| 7 | 1 | 7.95 | 2021-12-16 12:14:25 |
| 8 | 1 | 7.95 | 2021-12-16 12:14:25 |
| 9 | 4 | 29.95 | 2021-12-16 14:12:16 |
| 10 | 5 | 12.50 | 2021-12-16 14:12:17 |
| 11 | 1 | 6.95 | 2021-12-17 14:12:20 |
| 12 | 2 | 5.95 | 2021-12-17 14:12:22 |
所以我想有什么作為輸出:
| id_product | 日期 | cnt |
|---|---|---|
| 1 | 2021-11-15 | 2 |
| 2 | 2021-11-16 | 2 |
| 1 | 2021-12-16 | 3 |
我用 GROUP BY, HAVING COUNT() 嘗試了不同的東西,比如:
SELECT id_product, date_add, COUNT(*) as total FROM price_history
GROUP BY id_product HAVING COUNT(DISTINCT date_add) > 1;
或者:
SELECT ph.id_product, date_add, COUNT(*) AS cnt FROM price_history ph
JOIN (SELECT id_product FROM price_history HAVING COUNT(DATE_FORMAT(date_add, '%Y-%m-%d')) > 1) b
ON ph.id_product = b.id_product LIMIT 20;
uj5u.com熱心網友回復:
我相信您正在努力實作:(盡管我在分組中保留了價格)
SELECT id_product, price, date(date_add) AS 'date', count(*) AS total
FROM price_history
GROUP BY id_product, price, date(date_add) HAVING count(*) > 1;
...這給出了您想要的輸出:
id_product price date total
1 6.95 2021-11-15 2
2 4.95 2021-11-16 2
1 7.95 2021-12-16 3
示例dbfiddle。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/385460.html
