Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 选择“显示每个客户电子邮件的重复日期”_Sql Server_Select_Sql Server 2012 - Fatal编程技术网

Sql server 选择“显示每个客户电子邮件的重复日期”

Sql server 选择“显示每个客户电子邮件的重复日期”,sql-server,select,sql-server-2012,Sql Server,Select,Sql Server 2012,我试图检索过去十个月的信息,但有几个错误。首先,我的查询是从2013年开始获取数据的。其次,我在基于PolEffDate字段的结果中看到了重复项,如下所示: EntityID | PolEffDate | EMail | CustNo | Producer | BusinessPhone abcde-12345-fghij-67890 | 2013-09-24 | somewhere@email.com | 31000 | Bob Builder | 123-456-7890 abcde-123

我试图检索过去十个月的信息,但有几个错误。首先,我的查询是从2013年开始获取数据的。其次,我在基于PolEffDate字段的结果中看到了重复项,如下所示:

EntityID | PolEffDate | EMail | CustNo | Producer | BusinessPhone
abcde-12345-fghij-67890 | 2013-09-24 | somewhere@email.com | 31000 | Bob Builder | 123-456-7890
abcde-12345-fghij-67890 | 2013-12-01 | somewhere@email.com | 31000 | Bob Builder | 123-456-7890
abcde-12345-fghij-67890 | 2014-09-24 | somewhere@email.com | 31000 | Bob Builder | 123-456-7890
以下是我的SQL查询:

SELECT DISTINCT
     CONVERT(VarChar(36), Customer.CustId) AS EntityID
     , BasicPolInfo.PolEffDate, Customer.EMail, Customer.CustNo
     , (isnull(Employee.Firstname + ' ','') + isnull(Employee.LastName,'')) 
     AS Producer, Employee.BusFullPhone
FROM
     Customer INNER JOIN BasicPolInfo ON Customer.CustId = BasicPolInfo.CustId INNER JOIN
    Transaction ON BasicPolInfo.PolId = Transaction.PolId INNER JOIN
    GeneralBranch ON Customer.GLBrnchCode = GeneralBranch.GLBrnchCode INNER JOIN
    GeneralDepartment ON Customer.GLDeptCode = GeneralDepartment.GLDeptCode INNER JOIN
    GeneralDivision ON Customer.GLDivCode = GeneralDivision.GLDivCode INNER JOIN
    Employee ON BasicPolInfo.ExecCode = Employee.EmpCode
WHERE   
     BasicPolInfo.PolExpDate >= DATEADD(MONTH, -10,CONVERT(VARCHAR(11),GETDATE(),106)) 
     AND BasicPolInfo.PolExpDate <= CONVERT(VARCHAR(11),GETDATE(),106)
     AND Customer.Active = 'Y'
     AND Customer.typeCust = 'P'

谢谢你的帮助。我会尽力回答任何问题。

Daniel,您看到的重复是因为您在BasicPolInfo中有多条记录用于每个CustID值。您可以通过运行以下查询来确认这一点:

SELECT CustID, COUNT(*)
FROM BasicPolInfo
GROUP BY CustID
HAVING COUNT(*) > 1
根据您的模式,这可能不是一个问题-毕竟,这可能有一个完全合理的原因!我猜每个客户都有多个保单

要解决重复问题,我建议使用最小值或最大值的GROUP BY

您的另一个问题,即从早期日期检索数据,是因为您可能选择PolEffDate,策略生效日期,但可能筛选PolExpDate,策略到期日期。你打算用哪一种?过去十个月内完成的政策可能比这更早开始实施

若要解析更宽的日期范围,请在SELECT和WHERE子句中引用相同的值

使用MAX和PolExpDate进行以下查询:


也许将PolExpDate转换为日期而不是将GETDATE的比较转换为Varchar您的日期逻辑不必要地复杂,请尝试以下操作:DATEADDMONTH,-10,CASTGETDATE作为日期,CASTGETDATE作为日期PolExpDate是什么数据类型?公平点-这可能是读取数据的准确方法,尽管在过去的十个月里看起来很混乱。我认为一个简化的WHERE子句对OP的合并是有好处的,但是在我知道我是否在正确的轨道上之前,我不想添加它。
SELECT 
     CONVERT(VarChar(36), Customer.CustId) AS EntityID, 
     MAX(BasicPolInfo.PolExpDate) AS PolExpDate, -- note that this is now PolExpDate
     Customer.EMail, 
     Customer.CustNo, 
     (isnull(Employee.Firstname + ' ','') + isnull(Employee.LastName,'')) AS Producer, 
     Employee.BusFullPhone
FROM
    Customer INNER JOIN 
    BasicPolInfo ON Customer.CustId = BasicPolInfo.CustId INNER JOIN
    [Transaction] ON BasicPolInfo.PolId = [Transaction].PolId INNER JOIN
    GeneralBranch ON Customer.GLBrnchCode = GeneralBranch.GLBrnchCode INNER JOIN
    GeneralDepartment ON Customer.GLDeptCode = GeneralDepartment.GLDeptCode INNER JOIN
    GeneralDivision ON Customer.GLDivCode = GeneralDivision.GLDivCode INNER JOIN
    Employee ON BasicPolInfo.ExecCode = Employee.EmpCode
WHERE   
     BasicPolInfo.PolExpDate >= DATEADD(MONTH, -10,CONVERT(VARCHAR(11),GETDATE(),106)) 
     AND BasicPolInfo.PolExpDate <= CONVERT(VARCHAR(11),GETDATE(),106)
     AND Customer.Active = 'Y'
     AND Customer.typeCust = 'P'
GROUP BY 
     CONVERT(VarChar(36), Customer.CustId), 
     Customer.EMail, 
     Customer.CustNo, 
     (isnull(Employee.Firstname + ' ','') + isnull(Employee.LastName,'')), 
     Employee.BusFullPhone