我想获取最近2个工作日的交易工作日可能是TODAY & YESTERDAY
或TODAY & DAY BEFORE YESTERDAY
或YESTERDAY & DAY BEFORE YESTERDAY
表格结构
id
title
created
我怎样才能实现这一目标?工作日是指至少1个条目的日子。同一天有多个条目。
要使用此
获取不同的日期SELECT DISTINCT FROM_UNIXTIME(created, '%Y-%m-%d') as created FROM
{Table} ORDER BY id DESC LIMIT 2
现在,我如何使用此子查询来获取所有?像这样
SELECT id FROM {Table} WHERE created IN (**sub-query**)
有可能吗?
另一次尝试,但没有结果
$sql = "SELECT id FROM {Table} WHERE created BETWEEN (SELECT
DISTINCT FROM_UNIXTIME(created, \'%Y-%m-%d\') FROM {Table} ORDER BY id DESC
LIMIT 1, 1) AND (SELECT DISTINCT FROM_UNIXTIME(created, \'%Y-%m-%d\') FROM
{Table} ORDER BY id DESC LIMIT 2, 1) ";
答案 0 :(得分:2)
请尝试以下查询:
SELECT
A.id,
A.title,
A.created
FROM
{Table} AS A
INNER JOIN
(
SELECT DISTINCT
DATE(created) AS WorkingDay
FROM
{Table}
ORDER BY
WorkingDay DESC
LIMIT
2
) AS B
ON DATE(A.created) = B.WorkingDay
ORDER BY
A.created DESC, A.id
请找 NEW SQL Fiddle example,包括时间部分,据我所知,问题很好,会给出预期结果。
内部加入的查询:
SELECT DISTINCT
DATE(created) AS WorkingDay
FROM
{Table}
ORDER BY
WorkingDay DESC
LIMIT
2
明确选择表{Table}
2个最近日期(WorkingDay
),仅从DATE()
列值中提取created
部分。然后,在条件{Table}
上将此结果再次连接到DATE(A.created) = B.WorkingDay
后,从{Table}(别名时间AS A
)返回的最顶层查询仅返回那些先前发生的那些事务选择了最近的工作日(created
日期)。
我希望它有所帮助。
答案 1 :(得分:1)
我认为问题是你没有正确格式化你只需要这样的created
列
SELECT id FROM {Table} WHERE DATE_FORMAT(created,'%Y-%m-%d') IN (**your subquery here**)
这应该有效。快乐的编码!