查询三个表,没有公共列

时间:2017-04-13 21:11:24

标签: mysql sql-server date join

我刚刚开始工作,我的老板要我学习mySQL,所以请耐心等待,我已经学习了2天,而且我还没那么好。

所以我已经获得了3张桌子和几项任务。

表格是:

  1. mobile_log_messages_sms
  2. mobile_providers
  3. service_instances
  4. 在他们身上,我必须:

    • 了解过去25天内有多少条消息以及如何消息 他们做了多少收入
    • 然后我需要按天分组(所以每天,不包括小时)和 提供者名称。
    • 此外,我需要忽略所有具有空字符串的消息 在服务栏目下
    • 另外,我需要忽略那些只赚取收入和数量的消息 具有列service_enabled = 1
    • 的那些
    • 然后我需要按日期降序排序。
    表中的

    mobile_log_messages_sms

    • message_id - 用于计算消息
    • 价格 - 明显使用价格,排除那些0
    • 时间 - 以yyyy为单位的日期/ mm / dd hh:mm:ss format
    • service - 排除所有空字符串(或null)

    mobile_providers

    • provider_name - 用于与
    • 分组

    service_instances

    • 已启用 - 仅在值为1时使用

    我开始时:

    SELECT message_id, price, time
    FROM mobile_log_messages_sms
    WHERE time BETWEEN '2017-02-26 00:00:00'
    AND time AND '2017-03-22 00:00:00'
    

    但我需要更改日期格式,然后使用JOIN命令,但我不知道如何,我知道我需要添加更多,但我甚至在开始时难倒。此外,开始只列出消息,但我需要计算每天收入(价格)的总和。

    至少因为我还是一个菜鸟,有人能指出我正确的方向吗?非常感谢,如果我措辞不好,抱歉,英语不是我的第一语言。

1 个答案:

答案 0 :(得分:0)

了解过去25天内有多少邮件以及他们赚取了多少收入

<强> 1

SELECT COUNT(message_id), SUM(price)
FROM mobile_log_messages_sms
WHERE CAST(time AS DATE) BETWEEN DATE_SUB(CURRENT_DATE,INTERVAL 25 DAY) 
AND CURRENT_DATE;

<强> 2

SELECT COUNT(message_id), SUM(price)
FROM mobile_log_messages_sms
WHERE CAST(time AS DATE) BETWEEN DATE_SUB(CURRENT_DATE,INTERVAL 25 DAY) 
AND CURRENT_DATE
GROUP BY CAST(time AS DATE);

第3

SELECT COUNT(message_id), SUM(price)
FROM mobile_log_messages_sms
WHERE CAST(time AS DATE) BETWEEN DATE_SUB(CURRENT_DATE,INTERVAL 25 DAY) 
AND CURRENT_DATE AND service IS NULL
GROUP BY CAST(time AS DATE);

休息无法通过连接完成,因此请确保表格中至少有一列应该是通用的。