Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL根据接受的条件查找最近更新的项_Mysql - Fatal编程技术网

MySQL根据接受的条件查找最近更新的项

MySQL根据接受的条件查找最近更新的项,mysql,Mysql,我有一个包含以下列的表: 身份证 身份证号码 描述 登记日期 接受 id_编号不是唯一的,因为我可以在同一个表上有多个元素。我只需要找到每个id_编号的一个元素,并满足以下条件: 如果该项目已被接受至少一次,我需要与较新的注册日的项目,但只看其类型的接受 如果该项目尚未被接受,那么我需要已注册的最新项目 例如,如果我有以下数据: ID Id_Number Description Register_Date Accepted =========

我有一个包含以下列的表:

  • 身份证
  • 身份证号码
  • 描述
  • 登记日期
  • 接受
id_编号不是唯一的,因为我可以在同一个表上有多个元素。我只需要找到每个id_编号的一个元素,并满足以下条件:

  • 如果该项目已被接受至少一次,我需要与较新的注册日的项目,但只看其类型的接受
  • 如果该项目尚未被接受,那么我需要已注册的最新项目
例如,如果我有以下数据:

ID Id_Number    Description             Register_Date         Accepted
==============================================================================
1  TA-001       This is a test           19/02/2015 15:40:35      0
2  TA-004       test                     27/03/2015 12:00:18      1
3  DCMIX-001    test                     01/01/2011 00:00:00      0
4  TA-005       test                     01/01/2010 00:00:00      0
5  TA-001       different description    25/03/2015 11:07:42      1
6  TA-001       not accepted but newer   25/03/2015 11:53:42      0
7  TA-005       test                     27/03/2015 13:10:21      0
将生成此输出:

ID Id_Number    Description             Register_Date         Accepted
==============================================================================   
2  TA-004       test                    27/03/2015 12:00:18       1
3  DCMIX-001    test                    01/01/2011 00:00:00       0    
5  TA-001       different description   25/03/2015 11:07:42       1
7  TA-005       test                    27/03/2015 13:10:21       0

非常感谢您抽出时间。

如果该商品至少被接受过一次,我需要具有较新注册日期的商品,但只查看已接受的同类商品。

SELECT *
FROM (SELECT id_number,MAX(register_date) FROM mytable WHERE accepted = 1 GROUP BY id_number) accepted
JOIN mytable ON (mytable.id_number = accepted.id_number AND mytable.register_date = accepted.register_date)
SELECT *
FROM
(
    SELECT id_number
    FROM mytable
    GROUP BY id_number
    HAVING SUM(accepted) = 0
) not_accepted
LEFT JOIN mytable ON (mytable.id_number = not_accepted.id_number)
GROUP BY mytable.id_number
ORDER BY register_date DESC
如果项目未被接受,则我需要已注册的最新项目。

SELECT *
FROM (SELECT id_number,MAX(register_date) FROM mytable WHERE accepted = 1 GROUP BY id_number) accepted
JOIN mytable ON (mytable.id_number = accepted.id_number AND mytable.register_date = accepted.register_date)
SELECT *
FROM
(
    SELECT id_number
    FROM mytable
    GROUP BY id_number
    HAVING SUM(accepted) = 0
) not_accepted
LEFT JOIN mytable ON (mytable.id_number = not_accepted.id_number)
GROUP BY mytable.id_number
ORDER BY register_date DESC
请尝试以下查询:

SELECT l.*
FROM mytable l                         # 'l' from 'last'
LEFT JOIN mytable n                    # 'n' from 'newer'
    ON l.id_number = n.id_number       # match by in_number
    AND (l.accepted < n.accepted OR    # 'l' < 'n' on (accepted, register_date)
         l.accepted = n.accepted AND l.register_date < n.register_date)
WHERE n.id_number IS NULL              # 'n' (newer) does not exist
回到查询,连接条件的一部分是
l
(已接受,注册日期)
小于同一对
n

由于
LEFT JOIN
,当
l
(左表)的一行在
n
(右表)中没有匹配项时,将使用一行充满
NULL
s(用于
n
的列)

联接条件将
l
中的所有行与
n
中具有相同
id\u编号
且在
(已接受,注册日期)
部分上更大的行相匹配。最大值为
(已接受,注册日期)
l
行将在
n
中没有任何匹配项,以
NULL
s完成

WHERE
子句仅在从
n
中选择的列中保留
NULL
的行,这意味着它们在
(已接受,注册日期)
对上具有最大值

最后,
SELECT
子句从左表
l
中提取所需的列(反正
n
的列都是
NULL


使用其他
WHERE
条件(如果需要)完成查询,并添加相应的
orderby
表达式以获得所需顺序的行。

到目前为止您尝试了什么。StackOverflow不是代码生成器服务。您尝试的查询的具体问题是什么?请阅读更多关于在StackOverflow中询问的信息。这是MySQL-所以这些不是日期!!我最大的问题是,我试图在一个查询中得到整个结果,到目前为止,这是不可能的。看到第一个答案,我的方法似乎是错误的。这不是我想要的免费代码。@这是一个类似西班牙语的日期格式的日期时间。第一个查询不会产生所需的结果<代码>排序依据适用于
分组依据
之后,它对组进行排序,而不是对组内的条目进行排序。@axiac你说得对,我总是喜欢这个。。修正了。第一位代码看起来还可以。第二段代码留下了许多待设计的代码。这似乎有帮助。我试图在同一个查询中获得所有结果,但没有成功。这成功了!比另一个短,并且只在一个查询中。不,我会按id_号码订购,它会满足我的所有需求,谢谢。标记为接受,因为它比其他答案好