1

我有一张如下表

      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。

4

2 回答 2

2

你去:

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 )
于 2012-09-07T09:58:44.107 回答
0
select Cust_Name from customers_history where Created_Date='2012-05-17' and 
Cust_Status=1 order by Cust_Name desc limit 1
于 2012-09-07T10:34:21.523 回答