簡體   English   中英

從SQL表中檢索數據

[英]Retrieving data from SQL table

我有一個表,其中存儲了所有操作日志。 它包含“user_id”(標記用戶),“statement_id”(標記已經處理的語句),“action_date”(標記動作時間)和“action_type”(標記已執行的操作)。 用戶可以處理許多可以執行許多操作的語句。

我需要生成一個查詢,該查詢將顯示在特定時間(例如,從2018年3月1日到2018年3月30日)處理的語句 - 我可以做。 我的困難是限制結果。 我的意思是如何限制結果:

Statements that were worked on: 30, 30, 30, 18, 18, 42, 42, 42

對此:

Statements that were worked on: 30, 18, 42

我嘗試使用像這樣的查詢,但我不專業。 我發現很難理解一些限制SQL命令的概念。

SELECT * FROM action_log 
WHERE user_id = 1 
AND action_date >= 1519858800 
AND action_date <= 1522447200 
GROUP BY user_id 
HAVING user_id = 1 
ORDER BY id DESC

我會非常感謝任何幫助。

我想你正在尋找SELECT DISTINCT

SELECT DISTINCT statement_id
FROM action_log al
WHERE user_id = 1 AND
      action_date >= 1519858800 AND action_date <= 1522447200
ORDER BY statement_id DESC;

您可能會發現使用UNIX_TIMESTAMP()更容易維護:

SELECT DISTINCT statement_id
FROM action_log al
WHERE user_id = 1 AND
      action_date >= UNIX_TIMESTAMP('2018-03-01') AND
      action_date <= UNIX_TIMESTAMP('2018-03-30')
ORDER BY statement_id DESC;

我猜你只需要獨特的價值觀。 在SQL中有一個特殊的聲明。 使用SELECT DISTINCT

SELECT DISTINCT * FROM action_log WHERE user_id = 1 AND action_date >= 1519858800 AND action_date <= 1522447200 GROUP BY user_id HAVING user_id = 1 ORDER BY id DESC;

您可以使用它們來比較action_date。 你可以消除條件,因為它已經在哪里使用了。 如果user_id = 1且HAVING user_id = 1,則結果相同。 希望以下代碼適合您。

SELECT * FROM action_log WHERE user_id = 1 AND action_date between '1519858800' AND '1522447200' GROUP BY statement_id ORDER BY id DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM