在存在重复日期时间的表中添加毫秒

时间:2019-06-10 21:58:06

标签: sql sql-server

我正在使用一个临时表,我不确定这是否重要,它是这样创建的:

CREATE TABLE #ActivityLog 
(
     ActivityLogID UNIQUEIDENTIFIER,
     VehicleID UNIQUEIDENTIFIER,
     ActivityDateTime DATETIME
)

我正在尝试操纵表格,以使每个ActivityDateTime都没有重复的VehicleID

通过此查询,我得到了重复的值。

SELECT
    s.ActivityLogID, t.* 
FROM
    #ActivityLog s 
JOIN
    (SELECT 
         VehicleID, ActivityDateTime, COUNT(*) AS qty
     FROM 
         #ActivityLog
     GROUP BY 
         VehicleID, ActivityDateTime
     HAVING
         COUNT(*) > 1) t ON s.VehicleID = t.VehicleID 
                         AND s.ActivityDateTime = t.ActivityDateTime 
ORDER BY
    t.qty DESC

我的问题是我不知道如何遍历它们,以便在发现重复项时能够增加3毫秒(SQL处理的最短时间)。

因此,如果我有类似以下的行(我将简化uniqueID,以便它们显示更容易)

ActivityLogID  |      VehicleID  |     ActivityDateTime     
---------------+-----------------+--------------------------
     1                     9         2019-06-03 18:48:53.000    
     2                     9         2019-06-03 18:48:53.000    
     3                     9         2019-06-03 18:48:53.000    
     4                     9         2019-06-03 18:48:53.000    
     5                     9         2019-06-03 18:48:53.000    
     6                     9         2019-06-03 18:48:53.000    
     7                     9         2019-06-03 18:49:53.000    
     8                     9         2019-06-03 18:50:53.000    
     9                     9         2019-06-03 18:50:53.000    
     10                    9         2019-06-03 18:51:53.000    
     11                    9         2019-06-03 18:51:53.000    
     12                    9         2019-06-03 18:52:53.000

输出应类似于

ActivityLogID  |      VehicleID  |     ActivityDateTime     
---------------+-----------------+--------------------------
     1                     9         2019-06-03 18:48:53.000    
     2                     9         2019-06-03 18:48:53.003    
     3                     9         2019-06-03 18:48:53.006    
     4                     9         2019-06-03 18:48:53.009    
     5                     9         2019-06-03 18:48:53.012    
     6                     9         2019-06-03 18:48:53.015    
     7                     9         2019-06-03 18:49:53.018    
     8                     9         2019-06-03 18:50:53.000    
     9                     9         2019-06-03 18:50:53.003    
     10                    9         2019-06-03 18:51:53.000    
     11                    9         2019-06-03 18:51:53.003    
     12                    9         2019-06-03 18:52:53.000

2 个答案:

答案 0 :(得分:2)

修改数据听起来是个坏主意。为了安全使用 package it.unibas.webanalytics.modello; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; /** * * @author Vincenzo Palazzo */ @Entity(name = "portali") public class PortaleWeb { @Id @GeneratedValue(strategy = GenerationType.TABLE) private long id; @Column(nullable = false, unique = true, length = 50) private String nomeDominio; @Column(nullable = false, unique = true, length = 50) private String indirizzoIp; @Column(length = 20) private String indestatario; @OneToOne(mappedBy = "root") private AbstractSezione sezione; public PortaleWeb() { } public PortaleWeb(String nomeDominio, String indirizzoIp, String indestatario, AbstractSezione sezione) { this.nomeDominio = nomeDominio; this.indirizzoIp = indirizzoIp; this.indestatario = indestatario; this.sezione = sezione; } public String getNomeDominio() { return nomeDominio; } public String getIndirizzoIp() { return indirizzoIp; } public String getIndestatario() { return indestatario; } public ISezione getSezione() { return sezione; } public void setNomeDominio(String nomeDominio) { this.nomeDominio = nomeDominio; } public void setIndirizzoIp(String indirizzoIp) { this.indirizzoIp = indirizzoIp; } public void setIndestatario(String indestatario) { this.indestatario = indestatario; } public void setSezione(AbstractSezione sezione) { this.sezione = sezione; } } ,我将添加5毫秒。所以:


package it.unibas.webanalytics.modello;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

/**
 *
 * @author Vincenzo Palazzo
 */
@Entity(name = "visualizzazioni")
public class Visualizzazione {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;
    @Column(nullable = true, length = 50)
    private String nazioneDiProvenienza;
    @Column(length = 250)
    private String urlProvenienza;
    @Column(length = 250)
    private String urlDestinazione;
    @Column(length = 50)
    private String browser;
    private int daQuanto;
    @ManyToOne(cascade = CascadeType.ALL)
    private Pagina pagina;

    public Visualizzazione() {
    }

    public Visualizzazione(String nazioneDiProvenienza, String urlProvenienza, String urlDestinazione, String browser, int daQuanto) {
        this.nazioneDiProvenienza = nazioneDiProvenienza;
        this.urlProvenienza = urlProvenienza;
        this.urlDestinazione = urlDestinazione;
        this.browser = browser;
        this.daQuanto = daQuanto;
    }

    public String getNazioneDiProvenienza() {
        return nazioneDiProvenienza;
    }

    public String getUrlProvenienza() {
        return urlProvenienza;
    }

    public String getUrlDestinazione() {
        return urlDestinazione;
    }

    public String getBrowser() {
        return browser;
    }

    public int getDaQuanto() {
        return daQuanto;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Pagina getPagina() {
        return pagina;
    }

    public void setPagina(Pagina pagina) {
        this.pagina = pagina;
    }

    public void setNazioneDiProvenienza(String nazioneDiProvenienza) {
        this.nazioneDiProvenienza = nazioneDiProvenienza;
    }

    public void setUrlProvenienza(String urlProvenienza) {
        this.urlProvenienza = urlProvenienza;
    }

    public void setUrlDestinazione(String urlDestinazione) {
        this.urlDestinazione = urlDestinazione;
    }

    public void setBrowser(String browser) {
        this.browser = browser;
    }

    public void setDaQuanto(int daQuanto) {
        this.daQuanto = daQuanto;
    }

}

答案 1 :(得分:0)

使用Gordon建议的技术,您可以在CTE中更新表格。像这样:

vmax

我也可以建议,如果您不希望对VehicleID和ActivityDateTime进行复制,请在表格上创建一个唯一约束。