删除分组中的最小值和最大值

时间:2016-03-01 03:08:37

标签: sql

我正在尝试从数据集中获取总时数,因为您可以在两个不同的时间两次使用同一公司(company_B)的相同资产,但我遇到此加入问题。我知道我希望公司_B的最小值消失,而公司_B的最大值因为它们代表错误的日期而被淘汰。否定很容易但是Max呢?

我有:

由assetid ------ -------的StartDate ------- FinishDate公司名称---- HoursOnSite

22222 ------- ------- 2016年2月12日-------二零一六年二月二十零日-------- Company_A 192

22222 ------- 2016-02-01 ------- 2016-02-09 ------- Company_B -------- 208(保留)

22222 ------- 2016-02-12 ------- 2016-02-09 ------- Company_B -------( - 56)(删除)

22222 ------- 2016-02-01 ------- 2016-02-21 ------- Company_B -------- 480(删除)

22222 ------- 2016-02-12 ------- 2016-02-21 ------- Company_B -------- 216(保留)

55555 ------- ------- 2016年2月18日2016年2月22日------- -------- Company_C 96

99584 ------- ------- 2016年2月22日2016年2月25日------- -------- Company_D 63

2 个答案:

答案 0 :(得分:1)

我认为您可以查询公司B的最大和最小HoursOnSite记录,并使用(不在)或不等于排除这些记录。

如果您仍有疑虑,请粘贴您的查询。

答案 1 :(得分:0)

我假设必须至少有3个独特的assetid实例 - 公司名称组合才能使Max,Min过滤器正常工作。您可以在最终的where语句中更改它以满足您的要求

WITH CTE
AS (
    SELECT *
        ,count(CompanyName) OVER (PARTITION BY AssetID,CompanyName) AS a
    FROM <TABLE_NAME>
    )
SELECT *
FROM CTE
WHERE HoursOnSite NOT IN (
        SELECT MAX(HoursOnSite)
        FROM <TABLE_NAME>
        )
    AND gdp NOT IN (
        SELECT min(HoursOnSite)
        FROM <TABLE_NAME>
        )
    AND a > 2 --MODIFY AS PER YOUR REQUIREMENT