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。