从日期列表中查找当前月份中最早的日期

时间:2014-11-20 19:51:12

标签: python sql sqlite date web-scraping

后台:我正在用Python编写脚本来帮助管理我公司的纸张使用情况。我只是废弃打印机配置页并存储SQL数据库中每台打印机所消耗的纸张总量。我们租用我们的打印机的公司在我们收取额外费用之前每个月给我们一个限额,所以我想在我们超过这个限制时提醒自己和我的经理。

打印机的配置页面只消耗了总量 - 无法从中获取当月的总金额。

我觉得我过度思考这个问题,但我想对此有所了解。

以下是问题:如果我有strftime('%s','now')的时间戳列表(unix时代),我如何确定哪个日期是当前月份中最早的日期?然后,我想从当前日期中减去它,看看我们是否超过了月度限制。

2 个答案:

答案 0 :(得分:0)

SQLite的date functions有一个start of month修饰符;将其用作过滤器。

要获取最新的日期,请按日期排序,然后选择第一个:

SELECT name,
       (SELECT current_pages
        FROM printers
        WHERE name = names.name
        ORDER BY timestamp DESC
        LIMIT 1
       ) -
       (SELECT current_pages
        FROM printers
        WHERE name = names.name
          AND timestamp < CAST(strftime('%s', 'now', 'start of month') AS INTEGER)
        ORDER BY timestamp DESC
        LIMIT 1
       ) AS this_month_pages
FROM (SELECT DISTINCT name
      FROM printers) AS names;

答案 1 :(得分:-1)

一种可能的解决方案是:

SELECT *
FROM prints
where prints.timestamp between UNIX_TIMESTAMP("2014-11-01") and UNIX_TIMESTAMP("2014-12-01");

这将为您提供11月份打印的所有照片。

编辑:对于您的情况:

SELECT *
FROM prints
where prints.timestamp between UNIX_TIMESTAMP(DATE_FORMAT(NOW() ,'%Y-%m-01')) and UNIX_TIMESTAMP(NOW());

将获得当前月份的用法。