从日期列表中查找本月最早的日期

2024-06-11 19:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

背景:我正在用Python编写一个脚本,以帮助管理公司的纸张使用情况。我只是取消打印机配置页,并将每台打印机消耗的纸张总量存储在SQL数据库中。我们租用打印机的那家公司每月都会给我们一个限额,这样我们就可以额外收费了,所以我想提醒我自己和我的经理,如果我们超过这个限额的话。你知道吗

打印机的“配置”页仅包含已消耗的总金额-无法从中获取当月的总金额。你知道吗

我觉得我对这个问题想得太多了,但我想对它有一些其他的想法。你知道吗

所以这里有一个问题:如果我有一个来自strftime('%s','now')(unix纪元)的时间戳列表,我将如何确定哪个日期是当前月份最早的日期?然后我想从当前日期中减去,看看我们是否超过了每月的限额。你知道吗


Tags: 脚本数据库sql打印机情况公司经理背景
2条回答

一种可能的解决方案是:

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());

它将获得本月的使用情况。你知道吗

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;

相关问题 更多 >