2014-02-11 60 views
1

我在两个日期之间选择了两条记录,当我这样做时,我正在经历重复记录,我已经使用了不同的单词但它不工作:这就是我的查询的外观:如何在两个日期之间选择不同的值

public List<i> searchTwoDates(string firstDate, string secondDate) 
{ 
    DateTime fdate = Convert.ToDateTime(firstDate); 
    string realfirstDate = fdate.ToLongDateString(); 

    DateTime sdate = Convert.ToDateTime(secondDate); 
    string realsecondDate = sdate.ToLongDateString(); 

    List<i> date = new List<i>(); 
    SqlConnection conn = new SqlConnection(....); 
    SqlCommand command = new SqlCommand(@"SELECT distinct * From TableName WHERE Cast(columnName AS DATE) > @columnName AND CAST(columnName AS DATE) < @columnName1 ORDER BY columnName1 Desc", conn); 
    command.Parameters.AddWithValue("@columnName", realfirstDate); 
    command.Parameters.AddWithValue("@columnName2", realsecondDate); 

    conn.Open(); 
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     Mod d = new Mod(); 
     here i get my column names.... 
     date.Add(d); 
    } 
    conn.Close(); 
    return date; 
} 

我在我的数据库中也有一个唯一的ID,所以我们可以使用它来检索唯一的记录,但我会如何写?

目前我正在重复记录

ID FName sName Date 
1 John JAck 2013-9-07 
2 Linda Bush 2013-10-07 
3 Linda Bush 2013-11-07 
This is what i want 
ID FName sName 
1 John JAck 2013-9-07 
2 Linda Bush 2013-11-07 

这是2013年11月7日2013年9月7日之间的记录。在这些记录中我不希望与任何重复的ID

+0

你是否在数据库中存储datetime作为字符串? – Damith

+0

我将它存储为日期时间 - 但在这里我正在转换,所以它应该很好 – user911

+0

什么是'd'变量?它不会在任何地方初始化。 – fejesjoco

回答

1

[从意见迁移]

您应该使用select distinct id, fname, sname from table。如果你不需要日期,那么这将工作,没有重复。

+0

这不起作用,除非您只选择fname和sname,因为有不同的ID和日期字段。请参阅下面的@ user911 –

0

试试这个

Select Max(ID),FName,sName,Max(Date) 
FROM Table1 
Where Date > 'SomeDate' And Date < 'SomeDate' 
Group By FName,sName 
+0

使用这个,用户将无法选择两个日期? – user911

+0

它会给你想要的结果,你可以使用Between关键字来选择两个日期 –

+0

我试过在我的数据库,它的工作原理,但是当它来到C#它停在里面while(reader.Read())我得到错误说indexoutofrangeexception由ID上的用户代码未处理。我必须在某处指定ID吗?这是我的查询看起来如何'选择最大(ID),FName,sName,最大(日期)FROM Table1其中Date> @ Date1和Date <@ Date2 Group由FName,sName' – user911

0

不要使用不尝试BETWEEN

SELECT DISTINCT ID,FName,sName,Date 
FROM Table1 
WHERE Date BETWEEN 'Date1' And 'Date2' 

UPDATE

因为两个不同的日期和上面问题中的ID应该使用分组。这给了你:因为有不同的ID和日期为每个记录

SELECT MIN(ID),FName,sName, MIN(Date) 
FROM Table1 
WHERE Date BETWEEN 'Date1' And 'Date2' 
ORDER BY ID 
GROUP BY FName,sName 

DISTINCT将无法​​正常工作。

上面的查询会给你第一个发生的ID。您可以将ORDER BY更改为日期以最早获取。或者您希望最近使用MAX而不是MIN,并使用ORDER BYDESC

+0

我仍然获得重复记录Fname和Sname – user911

+0

什么如果你像上面那样添加DISTINCT,会发生什么? –

+0

忽略DISTINCT命令并查看上面的UPDATE。 –

相关问题