SQL - 给出发生事件的日期,获取发生相同事件的所有连续日期/记录

时间:2017-04-08 09:54:03

标签: sqlite

我在Windows Phone UWP应用程序上使用SQLite,但我想这个问题在任何SQL数据库上同样有效:

我只是在寻找SQL来实现这一目标 - 我可以自己将其插入代码中。

我有一个Trip对象:

public class Trip
{
    public string Iso3Code { get; set; }
    public string CityCode { get; set; }
    public string StateCode { get; set; }
    public DateTime Date { get; set; }
    public bool DeletedTrip { get; set; }
}

当用户添加旅行时,会为旅行的每一天创建Trip个对象,例如用户在4月1日至4月5日期间前往法国旅行。系统会创建5个Trip个对象,每天一个。

我有一个问题,在给定DateIso3Code(国家/地区代码),StateCodeCityCode的情况下,我需要获取所有Trip SQLite数据库中的对象。例如对于上面的旅行示例,假设我的日期为2017-04-03,我需要一种从数据库中检索所有5个Trip对象的有效方法。

我当前的方法有效,但对于长途旅行,例如2年,它非常慢 - 我基本上每天都会在数据库中访问一次:

internal static List<Trip> GetWholeTrip(Trip trip)
{
    List<Trip> wholeTrip = new List<Trip>();

    Trip currentTrip = trip;
    //get trips before this date
    while (currentTrip != null)
    {
        wholeTrip.Insert(0, currentTrip);
        currentTrip = GetAllTripsOnDate(currentTrip.Date.Date.AddDays(-1)).FirstOrDefault(p => p.Iso3Code == trip.Iso3Code && p.StateCode == trip.StateCode && p.CityCode == trip.CityCode && !p.DeletedTrip);//Note: RMc - should only ever be 1 but using FirstOrDefault as we don't control the TT web service!
    }

    //get trips after this date
    currentTrip = GetAllTripsOnDate(trip.Date.Date.AddDays(1)).FirstOrDefault(p => p.Iso3Code == trip.Iso3Code && p.StateCode == trip.StateCode && p.CityCode == trip.CityCode && !p.DeletedTrip);//Note: RMc - should only ever be 1 but using FirstOrDefault as we don't control the TT web service!
    while (currentTrip != null)
    {
        wholeTrip.Add(currentTrip);
        currentTrip = GetAllTripsOnDate(currentTrip.Date.Date.AddDays(1)).FirstOrDefault(p => p.Iso3Code == trip.Iso3Code && p.StateCode == trip.StateCode && p.CityCode == trip.CityCode && !p.DeletedTrip);//Note: RMc - should only ever be 1 but using FirstOrDefault as we don't control the TT web service!
    }

    return wholeTrip;
}

所以我基本上从提供的日期向后循环,直到我到达指定位置没有旅行的那一天,然后我返回到提供的日期并循环前进到没有指定旅行的那一天地点。这让我连续几天到该地点旅行。

是否有可用于返回所需数据的SQL语句? - 无论是一次打击,还是 - 任何低于上述的都会很好。

0 个答案:

没有答案