【问题标题】:Query for status change first time第一次查询状态变化
【发布时间】:2012-09-07 18:34:21
【问题描述】:

我有一张如下表

CREATE TABLE Customers_History(Row_Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Cust_Name VARCHAR(255), Created_Date 日期, Cust_Status TINYINT)

表格中的行如下

插入客户历史记录(客户名称、创建日期、客户状态) VALUES('客户 A', '20120516', 0), ('客户 B', '20120516', 0), ('客户 C', '20120516', 0), ('客户 A', '20120517', 1), ('客户 B', '20120517', 0), ('客户 C', '20120517', 0), ('客户 A', '20120520', 1), ('客户 B', '20120520', 0), ('客户 C', '20120520', 1), ('客户 A', '20120521', 0), ('客户 B', '20120521', 0), ('客户 C', '20120521', 1), ('客户 A', '20120526', 1), ('客户 B', '20120526', 1), ('客户 C', '20120526', 0);

我想要一个查询,通过将日期作为参数,输出如下所示

当我将 20120517 作为日期参数传递时,它应该将客户 A 带到哪里,因为它的状态从 0 变为 1

客户 A

当我将 20120520 作为日期的参数传递时,它应该将客户 C 带到哪里,因为它的状态从 0 变为 1

客户 C

当我将 20120526 作为日期参数传递时,它应该将客户 B 带到哪里,因为它的状态从 0 变为 1

客户 B

我想要特定日期的客户名称,其状态第一次从 0 变为 1。

注意:当我将 20120526 作为日期的参数传递时,它不应该带来客户 A,因为客户 A 状态在 17 本身从 0 更改为 1。

【问题讨论】:

  • 一个名为“客户”的表我希望只包含唯一客户,而不是每个客户的陈述数量。而是创建一个单独的表 CustomerStates,其中包含此数据并通过 CustomerID 链接到客户。
  • 我正在此表中跟踪客户历史记录。如果我按照您所说的创建单独的表,我如何在该表中跟踪客户状态
  • 然后将其命名为 CustomerHistory。当前表表明它是您的客户表,其中包含实际客户。
  • 好吧,我也修改了答案。

标签: mysql sql database data-modeling


【解决方案1】:

你去吧:

select
  c.Cust_Name
from
  Customers_History c
where
  c.CreatedDate = :YourDate and
  c.Cust_Status = 1 and
  not exists 
    ( select 
        'x' 
      from 
        Customers_History c2
      where 
        c2.Cust_Name = c.CustName and
        c2.Cust_Status = 1 and
        c2.Created_Date < c.Created_Date )

【讨论】:

  • 像魅力一样工作非常感谢。我希望你不会介意我问你上述要求的合适的桌子设计。提前谢谢
【解决方案2】:
select Cust_Name from customers_history where Created_Date='2012-05-17' and 
Cust_Status=1 order by Cust_Name desc limit 1

【讨论】:

  • 你还没明白我的问题
猜你喜欢
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多