我正在尝试从数据集中获取总时数,因为您可以在两个不同的时间两次使用同一公司(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
答案 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