如何在两个日期之间选择不同的值

时间:2014-02-11 10:33:20

标签: c# sql

我在两个日期之间选择了两条记录,当我这样做时,我正在经历重复记录,我使用了单词distinct但它不起作用:这是我的查询的样子:

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-9-07至2013-11-07之间的记录。在这些记录之间,我不想要任何重复的ID

3 个答案:

答案 0 :(得分:1)

[从评论中迁移]

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

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

请勿尝试使用BETWEEN

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

<强>更新

由于上述问题中有两个不同的日期和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和日期。

上面的查询将为您提供第一个出现的ID。您可以将ORDER BY更改为日期以获得最早的日期。或者您想要最新版本,然后使用MAX代替MIN,并将ORDER BYDESC一起使用。