【问题标题】:How to select the oldest group of dates from sqlite如何从 sqlite 中选择最旧的日期组
【发布时间】:2019-10-02 19:00:41
【问题描述】:

我正在为客户创建一个新数据库,并希望根据他通过 tkinter gui 输入的变量选择最旧的日期组。我正在使用 Sqlite,但我似乎找不到答案,因为日期存储为文本。 有没有一种方法可以比较日期并根据变量选择最旧的几个。 我不需要选择 2 个日期和介于两者之间的产品 我想选择3个产品出去,程序自动选择数据库中最旧的3个产品 谢谢你。 :)

例如如果表中有 5 个产品:

    • 1 月 1 日产品一。
    • 1 月 10 日产品二。
    • 产品三是 1 月 3 日。
    • 产品 4 是 2 月 5 日。
    • 产品 5 是 2 月 2 日。

我想选择最老的 4 个

所以结果 应该是:

    • 包含产品 1 的行
    • 包含产品 3 的行
    • 包含产品 2 的行
    • 包含产品 5 的行。

我该怎么做?

【问题讨论】:

  • 用什么文本来表示日期?用户输入的是什么变量?
  • 这是一个具有(先进先出)系统的商店:用户输入要出去的单位数量代码选择商店中最旧的产品并以其购买价格转移它们
  • 用什么文本来表示日期?
  • YYYY-MM-DD 代表日期

标签: python sqlite


【解决方案1】:

我相信你会使用类似的东西(假设日期列名为 product_date)

SELECT * FROM products ORDER BY product_date ASC LIMIT 4;
  • 格式为 YYYY-MM-DD 的日期将按文本排序,但这没问题。

例如

INSERT INTO products 
    VALUES
        ('Product 1','20190101'),
        ('Product2','20190110'),
        ('Product3','20190103'),
        ('Product4','20190205'),
        ('Product5','20190204');
SELECT * FROM products ORDER BY product_date ASC LIMIT 4;

结果:-

考虑评论

如果我想将限制设为变量怎么办

这是一个示例,其中 LIMIT 作为绑定的变量 (limit_var) 传递(即替换 ?):-

def so58207795():
    import sqlite3

    db = sqlite3.Connection("mycart")
    db.execute("CREATE TABLE IF NOT EXISTS products(product TEXT, product_date TEXT)")
    db.execute("INSERT INTO products VALUES('Product 1','20190101'),('Product2','20190110'),('Product3','20190103'),('Product4','20190205'),('Product5','20190204')")
    limit_var = "4"
    print(db.execute("SELECT * FROM products ORDER BY product_date ASC LIMIT ?",(limit_var)).fetchall())

导致:-

E:\PYCharmPythonProjects\venv\Scripts\python.exe E:/PYCharmPythonProjects/Test001.py
[('Product 1', '20190101'), ('Product3', '20190103'), ('Product2', '20190110'), ('Product5', '20190204')]

Process finished with exit code 0

【讨论】:

  • 非常感谢,我试试看告诉你。最后的要求是,如果我想将限制设为变量怎么办。那可能吗 ?非常感谢你的帮助。 :)
  • 是的,您只需以编程方式相应地更改 SQL(最好绑定值以避免 SQL 注入的可能性)。
  • 非常感谢您的解决方案。我有 3 天不能提问,我有一个紧急请求。很抱歉,我无法将我的 Entry() 设置为 int。做这件事对我来说非常重要。我尝试将我的条目设置为 IntVar() 并使用它,它给了我一个名为的错误:TypeError: 'IntVar' 对象不能被解释为整数。我尝试将入口变量放入 int() 并将其设置为 float 然后 int 并且没有任何效果。请帮助我,我很抱歉在这里问,但我不能再等了,我的截止日期越来越近了。谢谢。
  • @MohamedAmr 很抱歉,python 是一种我很少使用的语言,所以我一点也不流利。
【解决方案2】:

您可以在要排序的字段上使用 ORDER BY 并限制结果:

SELECT * FROM orders ORDER BY order_date ASC LIMIT 5

这将根据订单日期选择最低的 5 个订单。您可以使用 DESC 更改排序方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多