DROP TABLE IF EXISTS `items_stock`;
CREATE TABLE IF NOT EXISTS `items_stock` (
`ItemStockID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ItemID` mediumint(8) unsigned NOT NULL,
`Date` date NOT NULL,
`CurrentStock` decimal(14,2) NOT NULL DEFAULT '0.00',
`CreatedBy` int(5) NOT NULL,
`CreatedDate` datetime NOT NULL,
`ModifiedBy` int(5) DEFAULT NULL,
`ModifiedDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`Active` enum('1','0') NOT NULL DEFAULT '1',
PRIMARY KEY (`ItemStockID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `items_stock` (`ItemStockID`, `ItemID`, `Date`, `CurrentStock`, `CreatedBy`, `CreatedDate`, `ModifiedBy`, `ModifiedDate`, `Active`) VALUES
(1, 1, '2010-11-03', 500.00, 1, '2010-11-03 11:12:12', NULL, '2010-11-04 09:39:29', '1'),
(2, 1, '2010-11-04', 400.00, 1, '2010-11-04 11:12:12', NULL, '2010-11-04 10:10:09', '1'),
(3, 1, '2010-11-04', 700.00, 1, '2010-11-04 11:14:12', NULL, '0000-00-00 00:00:00', '1'),
(4, 1, '2010-11-03', 600.00, 1, '2010-11-04 11:19:12', NULL, '2010-11-04 10:11:26', '1'),
(5, 2, '2010-11-05', 800.00, 1, '2010-11-05 11:19:12', NULL, '2010-11-05 10:11:26', '1');
現在我想獲取當前所有項目的當前庫存(2010-11-05),例如ID爲1的當前庫存在700(ItemStockID 3)Max()GROUP BY(Aggregate)具有相同列值的功能問題
我試着用下面的查詢
SELECT MAX(DATE) AS DATE, ItemStockID, ItemID, CurrentStock FROM items_stock WHERE DATE <= '2010-11-05' AND Active = 1 GROUP BY ItemID;
+------------+-------------+--------+--------------+
| DATE | ItemStockID | ItemID | CurrentStock |
+------------+-------------+--------+--------------+
| 2010-11-04 | 1 | 1 | 500.00 |
| 2010-11-05 | 5 | 2 | 800.00 |
+------------+-------------+--------+--------------+
但它並沒有給予適當當前的股票,如果同一天有一個以上的時間
實際結果應該是這樣的
+------------+-------------+--------+--------------+
| DATE | ItemStockID | ItemID | CurrentStock |
+------------+-------------+--------+--------------+
| 2010-11-04 | 3 | 1 | 700.00 |
| 2010-11-05 | 5 | 2 | 800.00 |
+------------+-------------+--------+--------------+
如果我用下面的查詢這是給上述結果
SELECT ISTI.ItemStockID, ISTI.DATE, ISTI.ItemID, ISTI.CurrentStock FROM items_stock AS ISTI
JOIN (SELECT MAX(ItemStockID) AS ItemStockID
FROM items_stock AS IST
JOIN (SELECT MAX(DATE) AS DATE, ItemID FROM items_stock WHERE DATE <= '2010-11-05' AND Active = 1 GROUP BY ItemID) AS SD ON SD.Date = IST.Date AND IST.ItemID = SD.ItemID
GROUP BY IST.ItemID
) AS ISTO ON ISTO.ItemStockID = ISTI.ItemStockID;
你能告訴我如何獲得上述結果在最優化的方式
不,我想max(日期)GROUP BY ItemID&如果日期相同,而得到最大(日期),它必須得到最大(ItemStockID)對於那些相同的日期。檢查我的答案http://stackoverflow.com/questions/4094073/max-group-by-aggregate-function-problem-with-same-column-values/4094388#4094388 – 2010-11-04 06:53:13
這個假設是否成立?對於兩行A和B.如果A.ItemStockID> B.ItemStockID則A.DATE> = B.DATE。我認爲這是對的。那麼,這應該給你所問的結果。 – smartnut007 2010-11-04 06:57:22
MAybe,你可以嘗試查詢,看看是否給你想要的結果。 – smartnut007 2010-11-04 06:59:11