2017-07-07 24 views
-1

从相同日期确定记录的最佳方法是什么?正在搜索相同日期的记录

我从我的分期付款表2行:

ORDER_1 | 13 | Paid | 2017-02-01 00:00:00.000 | 
ORDER_2 | 14 | Paid | 2017-02-01 00:00:00.000 | 

我需要能够显示所有的分期付款其中的日期是相同的。

我曾尝试:

SELECT * FROM ORDER_INSTALMENT WHERE DATEDUE = DATEDUE 
+0

什么是你所有字段名? –

+0

OrderID,InstalmentID,InstalSetSatus,DateDue – PriceCheaperton

+0

另外:如果'DateDue'确实是一个日期,它应该是一个'Date',而不是'DateTime'或其他包含时间组件的数据类型。 – HABO

回答

1
SELECT a.OrderID, a.InstalmentID, a.InstalmentSatus, a.DateDue 
FROM ORDER_INSTALMENT AS a INNER JOIN ORDER_INSTALMENT AS b 
ON a.DATEDUE = b.DATEDUE 
AND a.OrderID <> b.OrderID 
GROUP BY a.OrderID, a.InstalmentID, a.InstalmentSatus, a.DateDue 
ORDER BY a.DATEDUE 

即使结果和速度是相同的,如果你在你的表使用的索引,可以使用不同的使简单:

SELECT DISTINCT a.OrderID, a.InstalmentID, a.InstalmentSatus, a.DateDue 
FROM ORDER_INSTALMENT AS a INNER JOIN ORDER_INSTALMENT AS b 
ON a.DATEDUE = b.DATEDUE 
AND a.OrderID <> b.OrderID 
ORDER BY a.DATEDUE 
+0

group by子句在查询中是多余的。 –

+0

谢谢...我会切换到第一个查询,第二个查询是好的;) –

+0

所有其他分期付款显示。我只需要问题分期付款来显示.. I.E与同一日期的那些。谢谢 – PriceCheaperton

1

您可以使用存在或内连接:

SELECT * 
FROM ORDER_INSTALMENT o 
WHERE EXISTS 
(
    SELECT 1 
    FROM ORDER_INSTALMENT i 
    WHERE o.DATEDUE = i.DATEDUE 
    AND i.<UniqueColumnName> <> o.<UniqueColumnName> 
) 

或者

SELECT DISTINCT t1.* 
FROM ORDER_INSTALMENT t1 
INNER JOIN ORDER_INSTALMENT t2 
ON t1.DATEDUE = t2.DATEDUE 
AND t1.<UniqueColumnName> <> t2.<UniqueColumnName> 

请注意,您需要更改<UniqueColumnName>到列名是表中是唯一的。

另一种选择:

;WITH CTE AS 
(
    SELECT DATEDUE, COUNT(*) As NumberOfRows 
    FROM ORDER_INSTALMENT 
    GROUP BY DATEDUE 
) 
SELECT * 
FROM ORDER_INSTALMENT t 
INNER JOIN CTE 
ON t.DATEDUE = CTE.DATEDUE 
WHERE NumberOfRows > 1