【问题标题】:Count rows of a particular day this week sqlite计算本周特定日期的行数 sqlite
【发布时间】:2021-05-12 15:34:30
【问题描述】:

我想创建一个查询,返回本周特定日期的行数。例如,如果 dayNumber = 1,它应该返回 BookSaveTime 为星期一的图书数。如果dayNumber = 2,它应该返回星期二的计数,等等。

var week = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek+6)%7));
return database.ExecuteScalar<int>("SELECT count(*) FROM Book WHERE BookSaveTime > ?;", week);

目前,此查询返回自一周开始以来的书籍数量 - 但我不知道如何修改它以返回给定指定日期的计数 - 例如,星期一或星期二。

public MyAppSQLiteDatabase()
{
    try
    {
        database = DependencyService.Get<ISQLiteService>().GetConnection(DbFileName);
        database.CreateTable<Book>();

        CurrentState = "Database created";

    }
    catch (SQLiteException ex)
    {
        CurrentState = ex.Message;
    }
}

public int GetDailyCount(int dayNumber){
    var day = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek+6)%dayNumber));
    return database.ExecuteScalar<int>("SELECT count(*) FROM Book WHERE BookSaveTime = ?;", day );
}

书籍类:

public class Book: INotifyPropertyChanged
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    private DateTime bookSaveTime;
    public DateTime BookSaveTime
    {
        get
        {
            return bookSaveTime;
        }
        set
        {
            if (bookSaveTime != value)
            {
                bookSaveTime= value;
                OnPropertyChanged("BookSaveTime");
            }
        }
    }
}
    

【问题讨论】:

  • 对于初学者,您应该使用等于而不是大于。 bookEntryTime 列的数据类型是什么?
  • 如果您可以显示一些除了表格之外的内容,尤其是在bookEntryTime 列中的内容,以避免任何猜测。
  • 请检查我的代码,让我知道它是否正确地满足了您的目的。最良好的祝愿 。 :-)

标签: c# sqlite xamarin sqlite.net


【解决方案1】:

要查找特定的工作日信息,您的查询应如下所示 =>

SELECT * FROM
(SELECT *, cast (strftime('%w', BookSaveTime) as integer) AS WeekDay
FROM BOOK) T1
WHERE T1.WeekDay=1; --Weekday=1 is MONDAY

要查找特定日期的计数,请使用下面的查询

SELECT WeekDay,COUNT(*) AS WeekDayCount FROM
(SELECT *,strftime('%w',BookSaveTime) AS WeekDay
FROM BOOK) T1
GROUP BY T1.WeekDay

注意:您可以在 T1 中添加 WHERE BookSaveTime BETWEEN '2010-01-01' AND '2010-01-31' 以选择特定日期范围内的数据。 DB-Fiddle中的演示代码。

【讨论】:

  • 谢谢@Linker。如何将其转换为 SQLite.NET ORM 查询?我的尝试没有返回任何行:return database.ExecuteScalar&lt;int&gt;("SELECT * FROM (SELECT *, cast(strftime('%w', BookSaveTime) as integer) AS WeekDay FROM BOOK) T1 WHERE T1.WeekDay = 1;");
  • 我认为database.ExecuteScalar&lt;int&gt; 将只返回一列的数据,因此代码可能无法达到您要求的目的。要获取输入表,您可以在链接中查看 think sample => SAMPLE SQLite C#
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多