Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 按每个客户选择最小预订日期_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 按每个客户选择最小预订日期

Sql 按每个客户选择最小预订日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表,CustomerMaster,EntBookings,现在对于每个客户,我在EntBookings表中记录了他们的每个预订。 我想要的是,找出所有客户的第一个预订日期 我试过的 SELECT cm.CustomerCode, cm.CustomerName, MIN(eb.BookingDate) OVER(PARTITION BY eb.BookingByCustomer) FROM EntBookings eb INNER JOIN

我有两个表,
CustomerMaster
EntBookings
,现在对于每个客户,我在
EntBookings
表中记录了他们的每个预订。 我想要的是,找出所有客户的第一个预订日期

我试过的

SELECT cm.CustomerCode,
       cm.CustomerName,
       MIN(eb.BookingDate) OVER(PARTITION BY eb.BookingByCustomer)
FROM   EntBookings eb
       INNER JOIN CustomerMaster cm
            ON  cm.CustomerCode = eb.BookingByCustomer
GROUP BY
       cm.CustomerCode,
       cm.CustomerName,
       eb.BookingByCustomer,
       eb.BookingDate 
它给出了如下结果:

Cust1   ABC     2013-01-24 00:00:00.000
Cust2   ABCD    2013-01-24 00:00:00.000
Cust2   ABCD    2013-01-24 00:00:00.000
Cust3   BCD     2013-01-25 00:00:00.000
Cust4   BCDE    2013-01-24 00:00:00.000
Cust7   DEF     2013-01-02 00:00:00.000
我不知道为什么对于
Cust2
,它显示两行?我怎样才能让它只返回一行

如果我这样做

SELECT cm.CustomerCode,
       cm.CustomerName,
       MIN(eb.BookingDate) OVER(PARTITION BY eb.BookingDate)
FROM   EntBookings eb
       INNER JOIN CustomerMaster cm
            ON  cm.CustomerCode = eb.BookingByCustomer
GROUP BY
       cm.CustomerCode,
       cm.CustomerName,
       eb.BookingByCustomer,
       eb.BookingDate 
我明白了

Cust7   DEF     2013-01-02 00:00:00.000
Cust1   ABC     2013-01-24 00:00:00.000
Cust2   ABCD    2013-01-24 00:00:00.000
Cust4   BCDE    2013-01-24 00:00:00.000
Cust3   BCD     2013-01-25 00:00:00.000
Cust2   ABCD    2013-02-13 00:00:00.000

在本例中,尽管我仍然得到了两行
Cust2
,但日期是错误的,它应该是
2013-01-24 00:00:00.000
(与第一种情况相同),但这返回了两行。因此,这两个查询都是不正确的。有人能帮我找出我做错了什么吗?

你把事情搞得太复杂了,而且你的分组太多了。似乎您只想根据客户代码和名称进行分组

SELECT 
     cm.CustomerCode, 
     cm.CustomerName, 
     MIN(eb.BookingDate) 
 FROM 
      EntBookings eb
 JOIN
      CustomerMaster cm     ON       
       cm.CustomerCode = eb.BookingByCustomer
 GROUP BY
       cm.CustomerCode, cm.CustomerName

这不起作用,因为它只会返回
eb.BookingDate
中的
min
值,而不考虑客户,并且所有客户的值都是相同的,而不管他们各自的最小预订日期。@Razort4x-您运行了吗?它是按客户分组的。每个客户将有一行,并且
MIN
将只适用于该组。@Damien\u不信者:对不起。我的错。我在运行它,但我没有这样做。它完成了工作。下面是一个示例,其中包含了我们目前拥有的尽可能多的样本数据。@Damien_不信者:感谢和+1感谢fiddle,我知道JSFIDLE,但不知道SQLFIDLE。