ben çiftleriBulma Yinelenen Siparişleri
customer order_number order_date
---------- ------------ -------------------
1 1 2012-03-01 01:58:00
1 2 2012-03-01 02:01:00
1 3 2012-03-01 02:03:00
2 4 2012-03-01 02:15:00
3 5 2012-03-01 02:18:00
3 6 2012-03-01 04:30:00
4 7 2012-03-01 04:35:00
5 8 2012-03-01 04:38:00
6 9 2012-03-01 04:58:00
6 10 2012-03-01 04:59:00
I (birbirinden 60 dakika içinde aynı müşteri tarafından sipariş) tüm çiftleri bulmak istiyorum biliyorum siparişlerin bir tablo var. Ya "yinelenen" satırlardan oluşan bir sonuç kümesi veya kaç müşterinin toplam sayısını içeren bir müşteri grubu. İşte
çiftleri birbirinden 60 dakika içinde ancak 1.58 ve 2:02 Benyani farklı saatlerde geçerlidir diye çalışmıyor
SELECT
customer,
count(*)
FROM
orders
GROUP BY
customer,
DATEPART(HOUR, order_date)
HAVING (count(*) > 1)
Bu
denedim budur Ayrıca buSELECT
o1.customer,
o1.order_number,
o2.order_number,
DATEDIFF(MINUTE,o1.order_date, o2.order_date) AS [diff]
FROM
orders o1 LEFT OUTER JOIN
orders o2 ON o1.customer = o2.customer AND o1.order_number <> o2.order_number
WHERE
ABS(DATEDIFF(MINUTE,o1.order_date, o2.order_date)) < 60
denedim Şimdi bu bana yinelenenlerin tümünde verir fakat bu bana yinelenen sipariş başına birden çok satır verir. Birden fazla kopya ile bazı siparişler olmasaydı o kadar da kötü olmazdı (o1, o2) ve (o2, o1). Bu durumlarda (o1, o2), (o1, o3), (o2, o1), (o2, o3), (o3, o1), (o3, o2) vb. Olsun. Tüm permütasyonları elde ederim.
Herkesin biraz anlayışı var mı? Burada en iyi performansa cevap aramak zorunda değilim, sadece işe yarayan.
Kaskad dependancy'niz var. Eğer '(0, 59, 118, 177, 236, vb.)' De olan emirleriniz varsa * [59 dakikalık bir appart] *, aramanızın sonucunun ne olmasını istersiniz? – MatBailie
@Dems ilginç. Tüm bu kopyaları düşünürdüm. Ancak her iki durumda da sonuçtan memnun olurum. –