【问题标题】:sqlite find out the date differencesqlite找出日期差异
【发布时间】:2018-09-30 02:37:43
【问题描述】:

我有这样的表:

CREATE TABLE `item_zone` (
    `item`  INTEGER NOT NULL,
    `zone`  INTEGER NOT NULL,
    `action_date`   TEXT NOT NULL,
    `price` INTEGER NOT NULL,
    `days_price_established`    INTEGER
);
INSERT INTO `item_zone` VALUES (50374500, 1, 1512248400, 5, 10);
INSERT INTO `item_zone` VALUES (50374500, 1, 1513112400, 9, 1);
INSERT INTO `item_zone` VALUES (50374500, 1, 1513198800, 8, null);

该表没有一些主键,但我认为可以使用 oid。 在 action_date 中,它存储类 UNIX 数据,在 days_price_builted 中,它存储距离上次价格变化还剩多少天 (action_data(n) - action_data(n-1)。我需要显示 days_price_estableshed,但我不知道如何使用日期。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    显示价格修改日期的日期:

    select strftime('%d-%m-%Y', datetime(action_date-(86400*days_price_established), 'unixepoch')) from item_zone;
    

    显示上次价格修改的日期:

    select strftime('%d-%m-%Y', datetime(action_date-(86400*days_price_established), 'unixepoch')) from item_zone;
    

    计算days_price_established

    select item,action_date,round((iz1.action_date-(SELECT iz2.action_date FROM item_zone iz2 WHERE iz2.oid<iz1.oid AND iz2.item=iz1.item ORDER by iz2.oid DESC limit 1))/86400) from item_zone iz1 order by iz1.oid;
    

    如果表为空,则更新 days_price_builted

    update item_zone set days_price_established=(select round((iz1.action_date-(SELECT iz2.action_date FROM item_zone iz2 WHERE iz2.oid<iz1.oid AND iz2.item=iz1.item ORDER by iz2.oid DESC limit 1))/86400) from item_zone iz1 WHERE iz1.oid=item_zone.oid) WHERE days_price_established IS NULL;
    

    【讨论】:

    • 最后一个查询与我需要的非常相似,所以我用这个解决了,非常感谢。它只能以这种方式在sqlite中工作吗?我可以问你关于我更相似的表还是我只需要开始新的问题?
    • 查询在 postgresql 上看起来很相似,只是 strftime 您应该使用 to_char('YYYY-MM-DD' ... 。如果您需要澄清,请在此处询问。
    • 我能否以某种方式使用纯 SQL 编写一个插入,它将为区域 1 中的项目“050374500”在某个时期(例如 01.05.2017 – 01.03)创建每个月的第一天的价格.2018) ?
    • 价格应该从哪里来?应该计算还是要手动添加?
    • 在这种情况下,奖品是固定的,例如是 5,但如果你觉得一等奖像 5 和每个月应该乘以 1.2(在这种情况下,如果需要你可以添加一些 collums,比如 price mult 什么的,这只是为了提高我对 sql 的理解)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2017-04-21
    • 2010-09-22
    • 2014-08-15
    相关资源
    最近更新 更多