计算本周特定日期的行数 sqlite

Posted

技术标签:

【中文标题】计算本周特定日期的行数 sqlite【英文标题】:Count rows of a particular day this week 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 列中的内容,以避免任何猜测。 请检查我的代码,让我知道它是否正确地满足了您的目的。最良好的祝愿 。 :-) 【参考方案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#

以上是关于计算本周特定日期的行数 sqlite的主要内容,如果未能解决你的问题,请参考以下文章

熊猫以时间为索引获取特定日期的行数

构建一个 SQL 来计算与父级相关的行数

计算其中的行数以找到特定值的行数[重复]

计算日期范围内每个日期的行数

计算日期尚未过去的行数

HIVE/Impala 查询:计算满足特定条件的行之间的行数