如何从SQL表中获取同一日期匹配的记录

问题描述 投票:0回答:1

如何查找同一个账号ID(不管属于什么状态)在同一日期有多个状态的所有记录,时间不重要,但日期很重要

预期结果应如下表所述,我应该选择同一帐户 ID 在同一天具有多个状态的数据

账户ID 状态 上次更新时间戳
12345 DISB 2023-09-07 06:30:30.000
12345 设置 2023-09-07 06:34:30.000
32341 雷布 2023-09-07 14:30:30.000
32341 D 2023-09-07 15:31:30.000
52355 设置 2023-09-09 14:30:30.000
52355 D 2023-09-09 15:31:30.000

样本表数据:

Create table PaymentRecord(
  accountid BIGINT,
  Status varchar(10),
  lastupdatedTimestamp DATETIME
)

INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(12345, 'DISB','2023-09-07 16:30:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(12345, 'SET', '2023-09-07 16:34:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(12346, 'D',   '2023-09-07 11:30:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(22341, 'CLR', '2023-09-08 13:30:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(32341, 'REB', '2023-09-08 14:30:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(32341, 'D',   '2023-09-08 15:31:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(42325, 'CLR', '2023-09-09 11:30:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(52355, 'SET', '2023-09-09 14:30:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(52355, 'D',   '2023-09-09 15:31:30.000')
INSERT INTO PaymentRecord (accountid,Status,lastupdatedTimestamp) VALUES(52355, 'SK',  '2023-09-10 16:31:30.000')

我尝试了以下方法,但没有达到预期的结果。

select distinct 
  AccountId
, Status
, convert(date, LastUpdatedTimestamp)
from PaymentRecord
where LastUpdatedTimestamp between '2023-09-07' and '2023-09-11'
Order by
  AccountId
, convert(date, LastUpdatedTimestamp)
, Status desc
sql sql-server sql-scripts
1个回答
0
投票

我花了一段时间才明白你的问题

但是用你的

WHERE
我无法重现你想要的结果

这个概念是esy进行一个子选择,您可以在某个日期获取多个状态的帐户ID和日期,并将其加入到主查询中

select p1.AccountId
  ,convert(date,p1.LastUpdatedTimestamp),Status 
from PaymentRecord p1
  JOIN
  
  (SELECT AccountId,convert(date,LastUpdatedTimestamp) as LastUpdatedTimestamp
  FROM  PaymentRecord
 where LastUpdatedTimestamp between '2023-09-08' and '2023-09-11'
  GROUP BY AccountId,convert(date,LastUpdatedTimestamp)
HAVING COUNt(DISTINCT Status) > 1) p2 
  ON p1.AccountId = p2.AccountId AND convert(date,p1.LastUpdatedTimestamp) = p2.LastUpdatedTimestamp
  Order by p1.AccountId, p1.LastUpdatedTimestamp,Status desc
账户ID (无栏名) 状态
32341 2023-09-08 雷布
32341 2023-09-08 D
52355 2023-09-09 设置
52355 2023-09-09 D

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.