2016-08-23 104 views
2

我有以下表格:SQL與TOP的ID從JOIN WHERE子句

-- t_products 
prod_id ... name ... price 
-------------------------- 
1   Prod1 23.2 
2   Prod2 11.5 
3   Prod3 10.0 
4   Prod4 4.43 

-- t_products_lists 
list_id ... prod_id ... date_created 
1   1   2016-02-01 
2   1   2015-31-12 
3   3   2015-01-01 
4   3   2015-12-01 
5   4   2014-02-05 
6   4   2012-24-06 
7   2   2016-11-10 

我需要的是從t_products_lists讓所有有date_created < 2016-01-01(2,3,4,5,6)的行

現在,從這些結果,我只需要prod_id最新date_created,用於複製prod_id的所有組。將需要從t_products得到nameprice,並返回date_created

結果應該是:

prod_id ... name ... price ... date_created 
------------------------------------------- 
1   Prod1 23.2  2015-31-12 (the only one before 2016-01-01) 
3   Prod3 10.0  2015-12-01 (the latest date) 
4   Prod4 4.43  2014-02-05 (the latest date) 

我想加入這樣的表至今:

SELECT COUNT(prod.prod_id), prod.name, prod.price, prodlist.date_created 
FROM t_products_lists prodlist 
INNER JOIN t_products prod ON prodlist.prod_id = prod.prod_id 
WHERE prodlist.date_created < CONVERT(DATETIME,'01.01.2016 23:59:59.997',0) 
GROUP BY prod.prod_id, art.name, art.price, prodlist.date_created 

,但現在我不知道我怎麼能只得到了prod_id與最新日期,因爲使用此查詢它只會返回所有ID 01.01.2016

回答

1

USE MAX(prodlist.date_created)

SELECT prod.prod_id, prod.name, prod.price, MAX(prodlist.date_created) 
FROM t_products_lists prodlist 
INNER JOIN t_products prod ON prodlist.prod_id = prod.prod_id 
WHERE prodlist.date_created < CONVERT(DATETIME,'01.01.2016 23:59:59.997',0) 
GROUP BY prod.prod_id, prod.name, prod.price 
0

您將需要類似於下面的內容。不要按創建的日期進行分組,而是在您的select子句中放置一個MAX。

SELECT COUNT(prod.prod_id), prod.name, prod.price, MAX(prodlist.date_created) 
FROM t_products_lists prodlist 
INNER JOIN t_products prod 
    ON prodlist.prod_id = prod.prod_id 
    WHERE prodlist.date_created < CONVERT(DATETIME,'01.01.2016 23:59:59.997',0) 
GROUP BY prod.prod_id, art.name, art.price 

您可以在http://www.w3schools.com/sql/sql_func_max.asp

再多讀一些關於MAX