计算按周

时间:2018-01-01 19:25:41

标签: python mysql sql django django-orm

我试图使用Django 2.0 ORM来实现这一目标,但是如果你能用原始SQL查询来解决这个问题,那么它也会非常有用。

比如说我有一个表格,其中包含"目的地",它将始终是一个城市的名称,例如"洛杉矶","纽约& #34;,"旧金山",或#34;西雅图" (但我们事先并不知道有多少个不同的城市)。

我需要一个SQL查询(或Django ORM代码)来统计指定日期范围内的所有城市,按记录周分组(基于created_at时间戳,周一开始的周数) )。

以下是Django模型的一个示例(非常简单):

from django.db import models
from django.utils import timezone


class Package(models.Model):
    id = models.AutoField(serialize=False, primary_key=True)
    name = models.CharField(max_length=64)
    email = models.CharField(max_length=128, unique=True)
    phone = models.CharField(max_length=32)
    destination = models.CharField(max_length=64)
    created_at = models.DateField(db_index=True, default=timezone.now)
    updated_at = models.DateField(default=timezone.now)

以下是所需输出的示例,结构为JSON:

{
    "2017-06-05-2017-06-11": {
        "Los Angeles": 100,
        "New York": 50,
        "Copenhagen": 20
    },
    "2017-06-12-2017-06-18": {
        "Los Angeles": 10,
        "Toronto": 23,
        "Las Vegas": 21,
        "Carson City": 8,
        "Raleigh": 1
    },
    "2017-06-19-2017-06-25": {
        "Toronto": 24,
        "Tokyo": 75,
        "Kansas City": 123,
        "Salem": 84,
        "Bismarck": 22,
        "Boise": 77,
        "Las Vegas": 123
    }
}

请注意,结果的大小可能会有所不同,日期范围全部从星期一开始,到星期日结束(包括两者),城市名称可变且未知。

我知道有很多方法可以将它构建到Python逻辑中并执行许多查询,但我希望我们可以在单个查询中执行此操作。谢谢!

1 个答案:

答案 0 :(得分:0)

对于原始查询,您可以按计数分组

select destination, week(created_at,1), count(*)
from my_table
group by destination, week(created_at,1)