首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询在时间范围内获取重复列值

SQL查询在时间范围内获取重复列值
EN

Stack Overflow用户
提问于 2015-04-16 11:41:05
回答 2查看 130关注 0票数 0

我有一个eCommerce网站,在那里我收到了很多欺诈命令。我想把那些Order_No拿出来。

这是我的查询

代码语言:javascript
复制
 SELECT 
     O.Order_No, O.Customer_ID, O.DateOrdered, O.IPAddress,
     C.FirstName, C.LastName, CD.nameoncard
 FROM 
    Order_No O
 INNER JOIN 
    CardData CD ON O.card_id = CD.id
 INNER JOIN 
    Customers C ON O.customer_id = C.customer_id   
 ORDER BY
    O.order_no desc   

以下是我想遵循的标准:

  1. 如果customer_id每6小时重复一次以上
  2. 如果IPAddress每6小时重复一次以上
  3. 如果在Nameoncard中找不到Lastname

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-28 19:21:27

以下是查询:

代码语言:javascript
复制
select * from
(
select b.order_no,b.dateordered,a.customer_id, C.FirstName, C.LastName, cd.nameoncard from order_no as a
left join order_no as b on a.customer_id=b.customer_id
inner join carddata as cd on b.customer_id=cd.customer_id
INNER JOIN Customers C ON b.customer_id = C.customer_id
where a.order_no < b.order_no
and datediff(hour,a.dateordered,b.dateordered) between 0 and 6
union
select b.order_no,b.dateordered,a.customer_id, C.FirstName, C.LastName, cd.nameoncard from order_no as a
left join order_no as b on a.IPAddress=b.IPAddress
inner join carddata as cd on b.customer_id=cd.customer_id
INNER JOIN Customers C ON b.customer_id = C.customer_id
where a.order_no < b.order_no
and datediff(hour,a.dateordered,b.dateordered) between 0 and 6
union
select a.order_no,a.dateordered,a.customer_id, C.FirstName, C.LastName, cd.nameoncard from order_no as a
inner join carddata as cd on a.customer_id=cd.customer_id
INNER JOIN Customers C ON a.customer_id = C.customer_id
where charindex(C.LastName,cd.nameoncard) = 0
) as abc
票数 0
EN

Stack Overflow用户

发布于 2015-04-16 12:14:58

你能试试这个吗?

代码语言:javascript
复制
WITH Tmp (Order_No, Customer_id, DateOrdered, IPAddress, FirstName,    LastName, NameOnCard) 
AS
(
SELECT Ord.Order_No, Ord.Customer_Id, Ord.DateOrdered, Ord.IPAddress,
    Cust.FirstName, Cust.LastName, CustData.NameOnCard
FROM Order_No Ord
INNER JOIN Customers Cust 
ON 
Cust.Customer_Id = Ord.Customer_Id
INNER JOIN 
CardData CustData
ON CustData.Id = Ord.Card_Id
)
SELECT DISTINCT a.*
FROM Tmp a
INNER JOIN Tmp b 
ON a.Order_No <> b.Order_No 
AND a.Customer_Id = b.Customer_Id
WHERE DATEDIFF(hour, a.DateOrdered, b.DateOrdered) >= 6
UNION
SELECT DISTINCT c.*
FROM Tmp c
INNER JOIN Tmp d 
ON c.Order_No <> d.Order_No 
AND c.IPAddress = d.IPAddress
WHERE DATEDIFF(hour, c.DateOrdered, d.DateOrdered) >= 6
UNION
SELECT DISTINCT e.*
FROM Tmp e
WHERE ISNULL(e.NameOnCard,'') = ''
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29673633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档