我的SQL查询在此处返回此结果集:
Person_id Product_id Discount_id Discount_Rule Active_Thru
-------------------------------------------------------------------------
1001 322 251 R1 '2016-12-23 21:36:38.890'
1001 323 251 R1 '2017-01-23 21:36:38.890'
1001 324 252 R2 '2016-12-23 21:50:30.933'
我需要通过在上面的结果集上应用过滤器来获得如下的结果集。这是为了从上述结果集中获取用于人的折扣ID。
Person_id Discount_id Discount_Rule Active_Thru
------------------------------------------------------------------
1001 251 R1 '2016-12-23 21:50:30.933'
1001 252 R2 '2016-12-23 21:50:30.933'
示例SQLFiddle在这里http://sqlfiddle.com/#!3/97f20/1/0
答案 0 :(得分:0)
您需要使用DISTINCT
子句,如下所示:
SELECT DISTINCT
Person_ID
, Discount_ID
FROM Table
这是一个SQLFiddle,其中包含上述代码的工作原理。
另一种方法是使用GROUP BY
,但在这种情况下它们都会评估相同的执行计划,因此请选择您喜欢的方式:
SELECT
Person_ID
, Discount_ID
FROM table
GROUP BY Person_ID
, Discount_ID
这是一个SQLFiddle,其中包含上述代码的工作原理。
<强>更新强>
正如您在评论中提到的,您需要在此基础上构建并返回Person_ID,Discount_ID和Discount_Rule组合的最小active_thru
日期。
为此你需要一个如下的查询:
SELECT
Person_ID
, Discount_ID
, Discount_Rule
, MIN(Active_thru) 'Min_Active_Thru'
FROM test
group by Person_id
, Discount_Id
, Discount_Rule
您还可以在此SQLFiddle中查看此查询的工作原理。
答案 1 :(得分:0)
尝试使用group by,如下所示:
SELECT person_id, discount_id
FROM table
GROUP BY person_id, discount_id