2014-03-06 121 views
-2

需要在31月23日23:59:59(月底)查找狀態爲1的所有用戶列表的建議。mysql:在特定時間獲取數據

select count(*) from users where status=1 and created_at=? 
+0

現在狀態改變了嗎? – avisheks

+0

是@avisheks狀態可以在下個月更改。需要查找所有用戶的31個1月狀態 – jacob21

+0

您是否在某處維護用戶狀態更改的歷史記錄? – rakeshjain

回答

0

將數據庫恢復到前一次的一種方法是將binlog反向運行到當前數據庫狀態。

啓動數據庫模式並運行與僅與表相關的binlog中的所有語句。

採取奴隸的幫助,如果仍有一些以前的狀態

0

以下語法會給有狀態= 1的任何用戶,並且是在31創建:一月的ST 2014

select count(*) 
from users 
where status=1 and DATE(created_at)='2014-01-31' 

這種語法將給具有準確時間'2014-01-31 23:59:59'的用戶。假設dateformat是相同的。似乎用戶在那個時候創建​​了unlikley。

select count(*) 
    from users 
    where status=1 and created_at='2014-01-31 23:59:59' 
+0

謝謝but.i需要所有用戶列表的狀態= 1在2014年1月31日23:59:59 ..對此的需求建議 – jacob21

+0

不需要,需要不同的數據..狀態= 1的用戶需要的計數在2014-01-31 23:59:59時間 – jacob21

+0

是的,這正是語法會給你。 –

0
select 
count(*) 
from 
users 
where status=1 and 
created_at = concat(last_day(curdate(), ' 23:59:59')); 
  • 閱讀更多關於last_day()功能here
0

如果使用Linux服務器,然後通過cronjob-

保存安排如下腳本低於user.sh文件中的行。

六user.sh


#!/bin/bash 

DBUSER=your_server_user 
DBPASS=your_server_pass 

mysql -u$DBUSER -p$DBPASS db_name -e "select count(*) from users where status=1;" >> user.xls 

echo -e "Please get the attached user Report." | mail -s"user Report" -a user.xls [email protected] 

現在cron利用此腳本 -

crontab -e命令

59 23 31 1 * /script_path/user.sh 

將在23:59執行31,揚並將用戶報告發送到您的郵件ID。

如果您使用的是Windows服務器,那麼您可以創建一個批處理文件並在Windows任務調度的幫助下調用它。

0

在你提到的一個表中存儲歷史用戶更新的評論。您可以使用此表來檢查誰在那個時候有狀態1用戶:

SELECT COUNT(DISTINCT user_id) AS users 
FROM status_history sh 
WHERE 
sh.created = (SELECT MAX(sx.created) 
        FROM status_history sx 
        WHERE sx.user_id = sh.user_id 
        AND sx.created < '2014-01-31 23:59:59') 
AND sh.status = 1 

我們做一個內部的選擇,以獲得每個狀態和用戶的最新狀態更改日期和抓住歷史與日期。然後,我們計算任何狀態爲1的人。顯然,如果你的表格模式不同,你可能需要調整上述內容。

SQL Fiddle example

相關問題