Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 2008_Tsql - Fatal编程技术网

Sql 搜索具有相同日期的记录

Sql 搜索具有相同日期的记录,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,确定同一表中日期相同的记录的最佳方法是什么 我的分期付款表中有两行: 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 如果在表中使用索引,即使结果和速度是相同的,也可以使用distinct

确定同一表中日期相同的记录的最佳方法是什么

我的分期付款表中有两行:

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
如果在表中使用索引,即使结果和速度是相同的,也可以使用distinct来简化:

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

您可以使用exists或内部联接:

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

所有字段名都是什么?OrderID、InstalmentID、InstalmentSatus、DateDueAdde:如果DateDue确实是一个日期,那么它应该是一个日期,而不是DateTime或其他包含时间组件的数据类型。group by子句在您的查询中是多余的。谢谢。。。我会切换到第一个查询回来,你的第二个查询是好的;所有其他的分期付款都在展出。我只需要有问题的分期付款就可以了。。也就是那些日期相同的。谢天谢地,直到不需要分组,你所要做的就是在on子句中添加第二个条件…@PriceCheaperton:再次检查;
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>
;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