来自WHERE子句的带有TOP ID的SQL JOIN

时间:2016-08-23 11:07:34

标签: sql-server join

我有以下表格:

-- 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。我需要从name获取pricet_products,然后与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,因为使用此查询它只会在 01.01.2016 之前返回所有ID

2 个答案:

答案 0 :(得分:1)

USE MainActivity

MAX( prodlist.date_created)

答案 1 :(得分: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