2017-10-18 83 views
-1

我想修改我的查詢,只輸出在我的SQL表(Ipaccounting),列(timeanddate)在最後的「天數」天數內的數據在另一個表(datapackages),柱(thresholdtimespandays)選擇數據返回從SQL表中指定的天數

存儲在ipaccounting,timeanddate的數據看起來像「二○一七年十月一十六日7點45分53秒」,並且指定datapackages,thresholdtimespandays就像「7」(實數從現在開始的最後7天)

我需要在查詢中添加/更改什麼?

我當前的查詢是:

SELECT ip_address 
     ,SUM(upload_bytes) as upload_bytes 
     ,SUM(download_bytes) as download_bytes 
     ,sum(upload_bytes + download_bytes) as totalbytes 
     ,package_id 
     ,username 
     ,networkaccess 
     ,packagename 
     ,speedlimit 
     ,threshold 
     ,throttlelimit 
     ,datalimitamount 
     ,datalimitrange 
     ,thresholdtimespandays 
FROM (
     (SELECT ipaccounting.src_address as ip_address 
      ,SUM(ipaccounting.bytes) AS upload_bytes 
      ,0 as download_bytes 
      ,users.username 
      ,users.networkaccess 
      ,datapackages.package_id 
      ,datapackages.packagename 
      ,datapackages.speedlimit 
      ,datapackages.threshold 
      ,datapackages.throttlelimit 
      ,datapackages.datalimitamount 
      ,datapackages.datalimitrange 
      , datapackages.thresholdtimespandays 
     FROM ipaccounting 
     join users on users.ipaddress = ipaccounting.src_address 
     join datapackages on datapackages.package_id = users.datapackage 
     WHERE dst_address NOT BETWEEN INET_NTOA('192.168.0.1') AND INET_NTOA('192.168.255.254') 
     GROUP BY src_address) 

     UNION ALL 

     (SELECT ipaccounting.dst_address as ip_address 
      ,0 AS upload_bytes 
      ,SUM(ipaccounting.bytes) as download_bytes 
      ,users.username 
      ,users.networkaccess 
      ,datapackages.package_id 
      ,datapackages.packagename 
      ,datapackages.speedlimit 
      ,datapackages.threshold 
      ,datapackages.throttlelimit 
      ,datapackages.datalimitamount 
      ,datapackages.datalimitrange 
      ,datapackages.thresholdtimespandays 
     FROM ipaccounting 
     join users on users.ipaddress = ipaccounting.dst_address 
     join datapackages on datapackages.package_id = users.datapackage 
     WHERE src_address NOT BETWEEN INET_NTOA('192.168.0.1') AND INET_NTOA('192.168.255.254') 
     GROUP BY dst_address) 
     ) a 
GROUP BY ip_address 
ORDER BY INET_ATON(ip_address) 

我不知道如何利用當前時間和減去在我的數據庫datapackages,thresholdtimespandays指定的天量,然後給出來的數據。

謝謝:)

+0

查看https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

冒着重複自己的風險... – Strawberry

+0

別擔心,我想通了。 –

回答

0

我已經玩過,並找出它自己!

我的更新查詢:

SELECT ip_address 
    ,SUM(upload_bytes) as upload_bytes 
    ,SUM(download_bytes) as download_bytes 
    ,sum(upload_bytes + download_bytes) as totalbytes 
    ,package_id 
    ,username 
    ,networkaccess 
    ,packagename 
    ,speedlimit 
    ,threshold 
    ,throttlelimit 
    ,datalimitamount 
    ,accountingdays 
FROM (
    (SELECT ipaccounting.src_address as ip_address 
     ,SUM(ipaccounting.bytes) AS upload_bytes 
     ,0 as download_bytes 
     ,users.username 
     ,users.networkaccess 
     ,datapackages.package_id 
     ,datapackages.packagename 
     ,datapackages.speedlimit 
     ,datapackages.threshold 
     ,datapackages.throttlelimit 
     ,datapackages.datalimitamount 
     ,datapackages.accountingdays 
    FROM ipaccounting 
    join users on users.ipaddress = ipaccounting.src_address 
    join datapackages on datapackages.package_id = users.datapackage 
    WHERE dst_address NOT BETWEEN INET_NTOA('192.168.0.1') AND 
INET_NTOA('192.168.255.254') 
    and timeanddate BETWEEN SUBDATE(CURRENT_TIMESTAMP(), INTERVAL 
datapackages.accountingdays DAY) AND CURRENT_TIMESTAMP() 
    GROUP BY src_address) 

    UNION ALL 

    (SELECT ipaccounting.dst_address as ip_address 
     ,0 AS upload_bytes 
     ,SUM(ipaccounting.bytes) as download_bytes 
     ,users.username 
     ,users.networkaccess 
     ,datapackages.package_id 
     ,datapackages.packagename 
     ,datapackages.speedlimit 
     ,datapackages.threshold 
     ,datapackages.throttlelimit 
     ,datapackages.datalimitamount 
     ,datapackages.accountingdays 
    FROM ipaccounting 
    join users on users.ipaddress = ipaccounting.dst_address 
    join datapackages on datapackages.package_id = users.datapackage 
    WHERE src_address NOT BETWEEN INET_NTOA('192.168.0.1') AND 
INET_NTOA('192.168.255.254') 
    and timeanddate BETWEEN SUBDATE(CURRENT_TIMESTAMP(), INTERVAL 
datapackages.accountingdays DAY) AND CURRENT_TIMESTAMP() 
    GROUP BY dst_address) 
    ) a 
GROUP BY ip_address 
ORDER BY INET_ATON(ip_address) 

我也讓我的數據庫進行一些更改,以及如datapackage.thresholdtimespandaysdatapackage.accountingdays所以我的查詢將是我的問題有點不同。